SQL表转置实现:无需crosstab将职位最高薪资转为列
解决方案:用条件聚合实现行转列
不用crosstab的话,最简洁直接的方式是用条件聚合,一步就能把行式结果转成列式:
SELECT MAX(CASE WHEN position = 'junior' THEN salary END) AS junior, MAX(CASE WHEN position = 'senior' THEN salary END) AS senior FROM candidates;
逻辑说明
CASE语句会筛选出对应职位的薪资,非目标职位的行返回NULL- 外层的
MAX()会自动忽略NULL,最终得到每个职位的最高薪资 - 全程基于原表计算,不需要先执行分组查询再转置,比复杂的pivot写法更轻量
如果要基于你已经写好的分组查询结果来转置,也可以嵌套子查询:
SELECT MAX(CASE WHEN position = 'junior' THEN max_salary END) AS junior, MAX(CASE WHEN position = 'senior' THEN max_salary END) AS senior FROM ( SELECT position, MAX(salary) AS max_salary FROM candidates GROUP BY position ) AS grouped_data;
这个写法逻辑和上面一致,只是把你的分组查询作为子查询,适合需要复用已有分组逻辑的场景。
内容的提问来源于stack exchange,提问作者user2186
相关产品推荐
相关产品推荐

