2010-09-22 81 views
3

我有一张用户表,在这个表中我有一个国家/地区字段,告诉这些人来自何处(即“瑞典”,“意大利”等)。我怎样才能做一个SQL查询来获取这样的:统计某个国家的用户数

Country  Number 
Sweden  10 
Italy  50 
...   ... 

用户从列表中选择我给他们自己的国家,但该列表确实是巨大的所以这将是巨大的,有一个SQL查询,可避免使用该列表,即查看数据库并仅返回数据库中的那些国家,因为例如我没有来自巴巴多斯的人,即使在注册表格的国家/地区选择字段中有该选项:)

提前致谢!

回答

3

这会给你想要的。但是您可能想要缓存查询的结果。有很多用户,这是一个相当沉重的查询。

SELECT 
    country, 
    COUNT(*) 
FROM 
    users 
GROUP BY 
    country 

也许一个更好的想法(假设你不需要计数)做这样的:

SELECT 
    DISTINCT country 
FROM 
    users 
2

如果国家的名称是用户表,尝试这样的事情:

SELECT Country, COUNT (*) AS Number 
FROM Users 
GROUP BY Country 
ORDER BY Country 

如果国家的名字在国内的表,那么你将不得不加入

SELECT Contries.CountryName, Count (*) AS Number 
FROM Users 
INNER JOIN Countries 
    ON Users.CountryId = Countries.CountryId 
GROUP BY Countries.CountryName 
ORDER BY Countries.CountryName 
+0

+1或左连接到国家,如果有用户没有有效国家ID。 – 2010-09-23 13:27:11

0

听起来像你想要这样的东西......?

SELECT Country, COUNT(*) AS Number 
FROM Users 
GROUP BY Country 
0

这是非常简单的:

SELECT 
    Country, COUNT(*) AS 'Number' 
FROM 
    YourTable 
GROUP BY 
    Country 
ORDER BY 
    Country 

你只是按国家的数据和计算每个国家的条目。

或者,如果你想他们的游客数量排序,使用不同的ORDER BY子句:如果你想每个国家计

SELECT 
    Country, COUNT(*) AS 'Number' 
FROM 
    YourTable 
GROUP BY 
    Country 
ORDER BY 
    COUNT(*) DESC 
0

select country, count(*) from users group by country; 

如果你只是想可能的值:

select distinct country from users;