SQL新手
条件:
查找每个区域的客户总数
查找每个区域的餐馆总数
餐馆销售的披萨最高价;如果该地区没有出售比萨饼的餐馆,那就是0。
SQL查询中的表
喜欢(cname,披萨)
客户(cname,area)
餐馆(rname,area)
出售(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
;
答案 0 :(得分:0)
'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