【问题标题】:SQL group by highest occurance按出现次数最多的 SQL 组
【发布时间】:2020-07-05 12:05:03
【问题描述】:

通过执行这个查询

SELECT year, genre, COUNT(genre)
FROM Oscar
GROUP BY year, genre

我得到以下输出:

2016        Action      2           
2016        Romance     1           
2017        Action      1           
2017        Romance     2           
2018        Fantasy     1           
2019        Action      1           
2019        Fantasy     2           
2020        Action      3           
2020        Fantasy     1           
2020        Romance     1   

现在我只想显示每年显示数量最多的流派。最好的方法是什么?

所以我希望输出如下所示:

2016 Action
2017 Romance
2018 Fantasy
2019 Fantasy
2020 Action

【问题讨论】:

    标签: sql group-by count greatest-n-per-group window-functions


    【解决方案1】:

    使用窗口函数:

    SELECT year, genre
    FROM (SELECT year, genre, COUNT(*) as cnt,
                 RANK() OVER (PARTITION BY year ORDER BY COUNT(*) DESC) as seqnum
          FROM Oscar
          GROUP BY year, genre
         ) yg
    WHERE seqnum = 1;
    

    如果有平局,RANK() 会返回所有排名最高的值。如果您特别想要一行,请使用ROW_NUMBER(),即使第一行有平局。

    【讨论】:

      【解决方案2】:

      你可以使用窗口函数:

      SELECT year, genre
      FROM (
          SELECT year, genre, RANK() OVER(PARTITION BY year ORDER BY COUNT(*) DESC) rn
          FROM Oscar
          GROUP BY year, genre
      ) t
      WHERE rn = 1
      

      如果您的数据库不支持窗口函数(例如 MySQL

      SELECT year, genre
      FROM Oscar o
      GROUP BY year, genre
      HAVING COUNT(*) = (
          SELECT COUNT(*) 
          FROM Oscar o1 
          WHERE o1.year = o.year 
          GROUP BY o1.category 
          ORDER BY COUNT(*) DESC LIMIT 1
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        • 2019-10-27
        • 2021-10-28
        • 2012-06-23
        相关资源
        最近更新 更多