2016-12-11 114 views
0

我有一個關於客戶,商店,購買,產品等信息的數據庫。我對每個城市有多少客戶感興趣。我發現這個由:來自兩個表的SQL計數

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

有誰知道如何做這個?

+1

希望你有一個名爲「城市」的任何表?如果沒有,那麼你從哪裏得到城市名稱? –

回答

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 
0

在店面表和客戶表之間做一個LEFT JOIN,也可以得到沒有任何客戶的城市!

SELECT s.city, count(*) 
FROM store s 
LEFT JOIN customer c ON s.city = c.city 
GROUP BY s.city 

此外,作爲@Akhter阿拉明爾漢評論說,難道你有一個cities表?因此,不要一遍又一遍地存儲城市名稱,只需存儲一次,然後在商店和客戶表中使用cityid。

+0

這不會創建我正在尋找的結果,例如,對於沒有客戶居住的城市,但有2個商店的城市計數爲2 –

+0

我通過計數(DISTINCT c.cID)替換了計數(*)。這看起來更像是理想的結果。除了顧客居住的城市以外,不存在商店的城市被排除在外 –

0

你可以做到這一點與UNION ALL

SELECT someColumn,someColumn,NULL 
FROM someTable 

UNION ALL 

SELECT NULL, NULL, someColumn 
FROM nextTable/orSameTable 

空的地方,你也會把下一個結果,ü從另一個查詢