2012-01-20 62 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想要的。 –

相关问题