SQL查询问题:获取NUMBER列最大值及对应ID
解决SQL获取最大值对应ID的问题
你的原语句问题出在GROUP BY ID, MAXNUMB:
MAXNUMB是MAX(NUMBER)的别名,在分组逻辑里,每个ID对应的MAX(NUMBER)其实就是该行的NUMBER值(单条数据的最大值就是自身),所以最终会按每个ID和对应的NUMBER分组,相当于每行单独成组,自然返回所有条目。
下面是几种正确的写法:
方法1:子查询获取最大值后关联
这种写法逻辑直观,适配大多数SQL数据库:
SELECT ID, NUMBER AS MAXNUMB FROM TABLE1 WHERE NUMBER = (SELECT MAX(NUMBER) FROM TABLE1);
方法2:使用窗口函数(推荐)
如果需要处理多个行同为最大值的场景,窗口函数更灵活:
- 用
ROW_NUMBER()会只返回一行最大值(若存在多个最大值,随机选取一行):
SELECT ID, NUMBER AS MAXNUMB FROM ( SELECT ID, NUMBER, ROW_NUMBER() OVER (ORDER BY NUMBER DESC) AS row_rank FROM TABLE1 ) ranked_table WHERE row_rank = 1;
- 用
RANK()会返回所有最大值对应的行:
SELECT ID, NUMBER AS MAXNUMB FROM ( SELECT ID, NUMBER, RANK() OVER (ORDER BY NUMBER DESC) AS num_rank FROM TABLE1 ) ranked_table WHERE num_rank = 1;
内容的提问来源于stack exchange,提问作者Txni.26
相关产品推荐
相关产品推荐

