如何按colC分组获取对应colA最大值的colB数值
解决方案
不用GROUP BY也能搞定这个需求,给你两种常用方法:
方法一:窗口函数(推荐,简洁高效)
用ROW_NUMBER()窗口函数给每组数据排序,直接筛选出目标行:
WITH ranked_data AS ( SELECT colA, colB, colC, -- 按colC分组,组内按colA从大到小排,给每行加序号 ROW_NUMBER() OVER (PARTITION BY colC ORDER BY colA DESC) AS rn FROM your_table_name ) -- 取每个组里序号为1的行,就是colA最大的那一行 SELECT colC, colA, colB FROM ranked_data WHERE rn = 1;
如果同一colC下有多个行的colA是并列最大值,想要把这些行都返回,就把ROW_NUMBER()换成RANK()或者DENSE_RANK()就行。
方法二:子查询关联(兼容旧版数据库)
先通过子查询拿到每个colC对应的最大colA,再关联原表找出对应的colB:
SELECT t1.colC, t1.colA, t1.colB FROM your_table_name t1 INNER JOIN ( -- 先按colC分组,拿到每组的最大colA SELECT colC, MAX(colA) AS max_colA FROM your_table_name GROUP BY colC ) t2 ON t1.colC = t2.colC AND t1.colA = t2.max_colA;
内容的提问来源于stack exchange,提问作者k.dkhk
相关产品推荐
相关产品推荐

