SQL多列GROUP BY:按builder分组获取对应最重船只的问题
解决每个Builder对应最重船只的查询问题
针对你要获取每个建造商(builder)对应最重船只的需求,给你两种实用的SQL写法:
方法一:窗口函数法(推荐,逻辑清晰)
用ROW_NUMBER()窗口函数给每个建造商的船只按重量降序编号,取编号为1的记录就是该建造商最重的船:
SELECT builder, ship_name, weight FROM ( SELECT builder, ship_name, weight, -- 按builder分组,组内按weight从大到小排序,生成行号 ROW_NUMBER() OVER (PARTITION BY builder ORDER BY weight DESC) AS row_num FROM 你的表名 ) temp WHERE row_num = 1;
如果同一个建造商有多个重量相同的最重船只,这个方法只会返回其中一艘;如果想返回所有同重量的最重船,把ROW_NUMBER()换成RANK()即可。
方法二:分组关联法
先通过分组查询算出每个建造商的最大重量,再关联原表匹配对应船只:
SELECT t.builder, t.ship_name, t.weight FROM 你的表名 t INNER JOIN ( -- 先查每个builder的最大重量 SELECT builder, MAX(weight) AS max_weight FROM 你的表名 GROUP BY builder ) max_weights ON t.builder = max_weights.builder AND t.weight = max_weights.max_weight;
这个方法会返回所有与该建造商最大重量匹配的船只,适合存在多艘同重量最重船的场景。
内容的提问来源于stack exchange,提问作者Delta Mike
相关产品推荐
相关产品推荐

