我有一个包含客户,商店,购物,产品等信息的数据库。我对每个城市有多少客户感兴趣。我发现了这个:
SELECT city, count(cID) FROM customer GROUP BY city
这给出了下表:
| City | # |
+---------------+---+
| Amsterdam | 4 |
| New York City | 2 |
| London | 1 |
现在,我不仅对客户所居住的城市感兴趣。我还希望有一个商店的城市,没有顾客住在桌子里。像这样:
| City | # |
+---------------+---+
| Amsterdam | 4 |
| New York City | 2 |
| London | 1 |
| Los Angeles | 0 |
简而言之,我想计算住在客户表,商店桌或两者中的每个城市的客户。
表格如下所示: 客户( cID ,cName,街道,城市)和 商店( sID ,sName,街道,城市)
有谁知道怎么做?
答案 0 :(得分:1)
SELECT c.city,
COUNT(DISTINCT c.cID) AS [#]
FROM customer c
GROUP BY c.city
UNION
SELECT s.city,
0 AS [#]
FROM store s
LEFT JOIN customer c ON s.city = c.city
WHERE c.cID IS NULL
答案 1 :(得分:0)
在商店表和客户表之间进行LEFT JOIN
,以获得没有任何客户的城市!
SELECT s.city, count(*)
FROM store s
LEFT JOIN customer c ON s.city = c.city
GROUP BY s.city
另外,正如@Akhter Alamin Farhan评论的那样,你没有cities
桌子吗?因此,不要一遍又一遍地存储城市名称,只需存储一次,并在商店和客户表中使用cityid。
答案 2 :(得分:0)
你可以使用UNION ALL
来做到这一点SELECT someColumn,someColumn,NULL
FROM someTable
UNION ALL
SELECT NULL, NULL, someColumn
FROM nextTable/orSameTable
Null是您将从另一个查询中获取下一个结果的地方