2012-01-20 83 views
7

我正試圖計算用戶表中不同的一組城市和國家/地區的出現次數。計算SQL中不同的多個列的出現次數

下表載列類似於:

userid city  country 
------ --------- -------------- 
1  Cambridge United Kingdom 
2  London  United Kingdom 
3  Cambridge United Kingdom 
4  New York United States 

我需要的是每個城市的名單,國家對與出現的次數:

Cambridge, United Kingdom, 2 
London, United Kingdom, 1 
New York, United States, 1 

目前我運行一個SQL查詢得到不同的對:

$array = SELECT DISTINCT city, country FROM usertable 

然後將它讀入PHP中的一個數組中,並循環遍歷陣列,運行查詢,以計算每個出現的每一行數組中:

SELECT count(*) FROM usertable 
WHERE city = $array['city'] 
AND country = $array['country'] 

我假設我的SQL的把握不足的是缺少的東西 - 這將是這樣做的正確方法,最好不介入的PHP?

回答

13
select city, country, count(*) 
from usertable 
group by city, country 
+0

令人驚歎的響應速度 - 非常感謝,完美運作(儘快接受答案) –

5

你需要的是一組由:

Select city, country, count(*) as counter 
from usertable 
group by city, country 
+0

感謝您提供非常快速的答案 - 完美! –

1
SELECT cityandcountry, count(*) as occurrences FROM (
    SELECT DISTINCT concat(city, country) FROM tablename 
) as baseview; 
如果你想城市和國家preformated

,或者

SELECT cityandcountry, count(*) as occurrences FROM (
    SELECT DISTINCT city, country FROM tablename 
) as baseview; 

如果不是。

+0

謝謝 - 在MySQL中試試這個,並得到以下錯誤:'每個派生表必須有它自己的別名' –

+0

對不起,我的壞。我編輯了我的答案以糾正錯誤。 –

+0

我相信這是行不通的。每個'count(*)'將只是'baseview'中的總行數,這不是OP想要的。 –

相關問題