如何按Season分组提取count(*)最大值对应的记录?
解决方案:按季节找出count(*)最大值对应的记录
你遇到的问题是因为直接嵌套聚合函数max(count(*))只能得到每个季节的最大数值,但无法关联到对应的Name字段。下面提供两种常用的解决方法:
方法一:使用窗口函数(推荐,适用于MySQL 8.0+、PostgreSQL、SQL Server等支持SQL:2003及以上的数据库)
窗口函数可以给每个季节内的记录按count(*)排序,再筛选出排序第一的记录:
WITH ranked_data AS ( SELECT Name, Season, `count(*)`, ROW_NUMBER() OVER (PARTITION BY Season ORDER BY `count(*) DESC`) AS rn FROM your_table_name ) SELECT Name, Season, `count(*)` FROM ranked_data WHERE rn = 1;
如果同一季节存在多条count(*)相同且均为最大值的记录,想要保留所有这类记录,可将ROW_NUMBER()替换为RANK():
WITH ranked_data AS ( SELECT Name, Season, `count(*)`, RANK() OVER (PARTITION BY Season ORDER BY `count(*) DESC`) AS rn FROM your_table_name ) SELECT Name, Season, `count(*)` FROM ranked_data WHERE rn = 1;
方法二:使用子查询关联(兼容老版本数据库)
先找出每个季节的最大count(*)值,再关联原表获取对应的完整记录:
SELECT t.Name, t.Season, t.`count(*)` FROM your_table_name t INNER JOIN ( SELECT Season, MAX(`count(*)`) AS max_count FROM your_table_name GROUP BY Season ) m ON t.Season = m.Season AND t.`count(*)` = m.max_count;
该方法同样会保留同一季节中count(*)等于最大值的所有记录,若只需保留一条,可根据需求添加额外筛选条件。
注意:将上述代码中的your_table_name替换为你实际使用的表名。
内容的提问来源于stack exchange,提问作者user21222773
相关产品推荐
相关产品推荐

