1

我有一个 MySQL 表,其中包含 ' id ' 和 ' country ' 作为列(还有其他内容,但相关)。

在这张表中,我有很多递增的 id 和很多不同的国家名称,例如“英国”、“匈牙利”和“美国”。

我正在为一个查询寻求帮助,该查询将返回前 10 个国家和按顺序排列的国家(如果可能,降序)

例如,如果“ Hungary ”出现 100 次,“ United Kingdom”出现50 次,“ United Kingdom ”出现 25 次,则返回:

'Hungary', 100
'United States', 50
'United Kingdom', 25

那有意义吗?

非常感谢,

马特

4

5 回答 5

8

我假设你正在寻找这样的东西:

SELECT country, COUNT(*)
FROM YourTable
Group By country
Order By COUNT(*) DESC
LIMIT 10
于 2013-06-15T14:27:48.037 回答
1

你可以试试这个查询:

SELECT country_column as country, count(country_column) as c FROM COUNTRIES_TABLE group by country order by c desc limit 10;

然后你可以使用LIMIT子句

于 2013-06-15T14:29:02.967 回答
0

这将起作用:

SELECT country_column as country, count(country_column) as c 
FROM COUNTRIES_TABLE 
GROUP BY country 
ORDER BY c DESC
limit 10;
于 2013-06-15T14:36:31.427 回答
0

对 Abubakkar 的回答的小幅更新(忽略任何国家名称为 NULL 的记录) - 如果您还想计算空值,请按如下方式更新您的计数语句:

SELECT Country, count(*) as countval
FROM COUNTRIES_TABLE 
Group By Country
Order By countval DESC
LIMIT 10;

如果表中有 34 个空值,则响应将类似于:

'Hungary', 100
'United States', 50
NULL, 34
'United Kingdom', 25

在这种情况下,我没有发现 count(*) 非常直观的语法,但它可以工作。

于 2016-03-10T20:01:52.617 回答
-1
Select top 10 Country, itemCount
From (Select country, count(*) itemCount
      From table
      Group By country) z
Order By itemCount desc 
于 2013-06-15T14:28:39.283 回答