我有一个MySQL表,其中包含' id '和' country '列表(还有其他内容,但相关)。
在此表中,我有很多递增ID和许多不同的国家/地区名称,例如“英国”,“匈牙利”和& '美国'。
我正在为查询提供一些帮助,这些查询将返回前10个国家/地区并按顺序计算它们(如果可能的话会降序)
例如,如果'匈牙利'出现100次,'美国'出现50次,'英国'出现25次,那么会回来:
'Hungary', 100
'United States', 50
'United Kingdom', 25
这有意义吗?
非常感谢,
马特
答案 0 :(得分:4)
我认为你正在寻找这样的东西:
SELECT country, COUNT(*)
FROM YourTable
Group By country
Order By COUNT(*) DESC
LIMIT 10
答案 1 :(得分:1)
您可以尝试此查询:
SELECT country_column as country, count(country_column) as c FROM COUNTRIES_TABLE group by country order by c desc limit 10;
然后你可以使用LIMIT
子句
答案 2 :(得分:0)
这将有效:
SELECT country_column as country, count(country_column) as c
FROM COUNTRIES_TABLE
GROUP BY country
ORDER BY c DESC
limit 10;
答案 3 :(得分:0)
轻微更新Abubakkar的答案(忽略任何带有NULL国家/地区名称的记录) - 如果您还想计算空值,请按如下方式更新您的count语句:
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
在这种情况下,我没有找到计数(*)非常直观的语法,但它确实有效。
答案 4 :(得分:-1)
Select top 10 Country, itemCount
From (Select country, count(*) itemCount
From table
Group By country) z
Order By itemCount desc