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/