【问题标题】:Select top 3 most count group by - SQL选择前 3 个最多计数的组 - SQL
【发布时间】:2014-06-24 22:40:29
【问题描述】:

我在下面有一个sql 声明,它根据国家/地区名称进行分组。

SELECT COUNTRY,count(*) FROM DRUG_SEIZURE WHERE COUNTRY IS NOT NULL GROUP BY COUNTRY

结果示例:

Country           Count
-------           -----
America           20
Saudi Arabia      28
China             10
Japan             14
Kenya             10
Pakistan          12
India             11

我想要前三个最大价值国家。在上述情况下,我只想要:

Country           Count
-------           -----
Saudi Arabia      28
America           20
Japan             14

【问题讨论】:

  • 你用的是什么关系型数据库?
  • 按计数排序,top(3) 应该这样做
  • Oracle 11g 我正在使用@Mureinik

标签: mysql sql sql-server oracle subquery


【解决方案1】:

取决于您使用的 RDBMS:

SQL 服务器:

SELECT TOP 3 COUNTRY, count(*) 
FROM DRUG_SEIZURE 
WHERE COUNTRY IS NOT NULL 
GROUP BY COUNTRY
ORDER BY count(*) DESC

MySQL:

SELECT COUNTRY, count(*) 
FROM DRUG_SEIZURE 
WHERE COUNTRY IS NOT NULL 
GROUP BY COUNTRY
ORDER BY count(*) DESC
LIMIT 3

甲骨文:

SELECT *
FROM (
  SELECT COUNTRY, count(*) 
  FROM DRUG_SEIZURE 
  WHERE COUNTRY IS NOT NULL 
  GROUP BY COUNTRY
  ORDER BY count(*) DESC
) mr
WHERE rownum <= 3
ORDER BY rownum;

【讨论】:

    【解决方案2】:
    SELECT *
    FROM   (SELECT   COUNTRY,count(*) 
            FROM     DRUG_SEIZURE 
            WHERE    COUNTRY IS NOT NULL 
            GROUP BY COUNTRY
            ORDER BY 2 DESC)
    WHERE  rownum <= 3;
    

    【讨论】:

    • 2 的订单是什么?
    • 按 SELECT 中的第二个字段排序,即count(*) 。
    • 是的,@Linger 打败了我。荣誉。
    【解决方案3】:
    SELECT TOP 3 COUNTRY, COUNT(*) 
    FROM DRUG_SEIZURE 
    WHERE COUNTRY IS NOT NULL 
    GROUP BY COUNTRY
    ORDER BY COUNT(*) DESC
    

    【讨论】:

    • 感谢这篇文章及以上文章对我的帮助。
    • 这是一个可悲的案例,其中第一个答案随后通过更改问题上的标签而无效(这是 SQL Server 语法而不是 Oracle,因为现在已标记问题)。
    • Tom 的答案是在 user3400389 指定 RDBMS 之前发布的
    【解决方案4】:

    见:

    http://troels.arvin.dk/db/rdbms/#select-limit

    了解如何根据标准限制结果集,以及在许多不同的 DBMS 中。

    【讨论】:

      猜你喜欢
      • 2016-12-08
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 2018-10-30
      相关资源
      最近更新 更多