【问题标题】:sql query to return top 10 count of countriessql查询返回前10个国家
【发布时间】:2013-06-15 14:24:07
【问题描述】:

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

在这张表中,我有很多递增的 id 和很多不同的国家/地区名称,例如“United Kingdom”、“Hungary”和“United States'。

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

例如,如果“Hungary”出现 100 次,“United States”出现 50 次,“United Kingdom”出现 25 次,那么这个会返回:

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

这有意义吗?

非常感谢,

马特

【问题讨论】:

  • 我的回答对你有用吗?

标签: mysql sql


【解决方案1】:

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

SELECT country, COUNT(*)
FROM YourTable
Group By country
Order By COUNT(*) DESC
LIMIT 10

【讨论】:

  • +1,撤消 -1。人们偶尔会犯错误。没有人是完美的。
  • -1 - 不同的语句不正确(将始终返回“1”),并且您使用“CountryName”而不声明它(我认为您的意思是“国家”?)
【解决方案2】:

你可以试试这个查询:

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

然后你可以使用LIMIT 子句

【讨论】:

  • 啊哈SELECT country, count(country) FROM table group by country ORDER BY count(country) DESC LIMIT 10;工作!
【解决方案3】:

这将起作用:

SELECT country_column as country, count(country_column) as c 
FROM COUNTRIES_TABLE 
GROUP BY country 
ORDER BY c DESC
limit 10;

【讨论】:

    【解决方案4】:

    对 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(*) 的语法非常直观,但它确实有效。

    【讨论】:

      【解决方案5】:
      Select top 10 Country, itemCount
      From (Select country, count(*) itemCount
            From table
            Group By country) z
      Order By itemCount desc 
      

      【讨论】:

      • 我认为他对 MSSQL 感到困惑。只需删除 TOP 10 并将 LIMIT 10 放在查询末尾即可。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2014-11-03
      • 2015-02-24
      相关资源
      最近更新 更多