SQL新增功能
条件:
查找每个区域的客户总数
查找每个区域的餐厅总数
餐厅出售披萨的最高价格;如果该区域没有餐厅出售披萨,则为0。
SQL查询中的表
喜欢(cname,披萨)
客户(cname,地区)
餐厅(rname,区域)
销售(rname、披萨、价格)
示例数据库架构供参考:http://sqlfiddle.com/#!9/d5cf74
预期结果

| area   | totalCustomer   | totalRest | MaxValue
----------------------------------------------
| East  |      3           | 10        | 30
| North |      2           | 20        | 10
| South |      2           | 20        | 20
| West  |      1           | 0         | 0

当前结果
| area   | totalCustomer   | totalRest | MaxValue
----------------------------------------------
| East  |      3           | 5         | 30
| North |      2           | 10        | 10
| South |      2           | 10        | 20

西区不在桌子里面。
我想要的是所有有顾客的地方。不管他们是否在卖披萨。
如果那家餐厅不卖披萨,它仍然会被计入餐厅总数。
如果这个地区只有不卖披萨的餐馆,披萨的最大价值将是0。
我的SQL代码:
SELECT c.area, COUNT(DISTINCT c.cname), COUNT(DISTINCT r.area), MAX(s.price)
FROM Customers c
JOIN Restaurants r ON r.area = c.area
JOIN Sells s ON r.rname = s.rname
WHERE area = all(
-- i'm thinking to use all to include every area that has customer. Whether or not it has any restaurants.
)
GROUP BY c.area
;

最佳答案

未显示'West'的原因是,您的最后一个连接需要是外部的(默认情况下,连接是内部的):

SELECT
    c.area
,   COUNT(DISTINCT c.cname)
,   COUNT(DISTINCT r.name)
,   MAX(COALESCE(s.price, 0))
FROM Customers c
LEFT OUTER JOIN Restaurants r ON r.area = c.area
LEFT OUTER JOIN Sells s ON r.rname = s.rname AND s.name='pizza'
GROUP BY c.area

关于mysql - 总结SQL中四个不同表的列值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48963153/

10-09 00:58