来自两个表

时间:2016-12-11 10:38:38

标签: sql aggregate

我有一个包含客户,商店,购物,产品等信息的数据库。我对每个城市有多少客户感兴趣。我发现了这个:

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,街道,城市)

有谁知道怎么做?

3 个答案:

答案 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是您将从另一个查询中获取下一个结果的地方