如何修正SQL脚本以获取用户数量最多的分组?
修正方案
你的原脚本问题在于CTE里的RANK()函数分区逻辑错误——按gr_type分区后排序,本质是在每个分组内部对users做排序,无法帮你找出整体用户数最多的分组。正确思路是先统计每个分组的用户总数,再从中筛选出数量最大的分组。
以下是几种可行的修正方法:
方法一:窗口函数筛选排名第一的分组
WITH cte AS ( SELECT gr_type, COUNT(users) AS user_count, -- 先统计每个分组的用户总数 RANK() OVER (ORDER BY COUNT(users) DESC) AS rnk FROM table1 GROUP BY gr_type ) SELECT gr_type, user_count AS max_users FROM cte WHERE rnk = 1;
如果存在多个分组用户数并列最多,RANK()会返回所有并列分组;若只想返回其中一个,将RANK()替换为ROW_NUMBER()即可。
方法二:用TOP 1直接取最大分组
SELECT TOP 1 gr_type, COUNT(users) AS max_users FROM table1 GROUP BY gr_type ORDER BY COUNT(users) DESC;
该方法更简洁,适合仅需单个最大分组的场景(若有并列,仅返回其中一个,具体取决于数据库排序规则)。
方法三:子查询匹配最大用户数
SELECT gr_type, COUNT(users) AS max_users FROM table1 GROUP BY gr_type HAVING COUNT(users) = ( SELECT MAX(user_count) FROM ( SELECT COUNT(users) AS user_count FROM table1 GROUP BY gr_type ) AS sub );
此方法会返回所有用户数等于最大值的分组,适配存在并列的场景。
内容的提问来源于stack exchange,提问作者Kurasao
相关产品推荐
相关产品推荐

