You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效实现SQL键值对数据的PIVOT(行转列)操作

高效实现键值对转宽表(替代多次LEFT JOIN)

针对大数据量下的键值对转宽表需求,条件聚合是远优于多次LEFT JOIN的方案,只需要扫描一次数据表,避免了多表关联带来的性能开销。

原问题场景

原始键值对数据:

CustomerId BookKey BookValue
John       Title   Goosebumps
John       Count   5
Max        Title   Harry Potter
Max        Count   7
Max        Pages   50

需要转成宽表格式:

CustomerId Title          Count Pages
John       GooseBumps       5     -
Max        Harry Potter     7     50

高效实现代码

SELECT
    CustomerId,
    COALESCE(MAX(CASE WHEN BookKey = 'Title' THEN BookValue END), '-') AS Title,
    COALESCE(MAX(CASE WHEN BookKey = 'Count' THEN BookValue END), '-') AS Count,
    COALESCE(MAX(CASE WHEN BookKey = 'Pages' THEN BookValue END), '-') AS Pages
FROM data_bags
GROUP BY CustomerId;

方案优势

  • 仅扫描一次data_bags表,避免多次LEFT JOIN带来的重复IO和关联计算,大数据量下性能提升明显
  • 逻辑简洁,扩展性强:新增BookKey字段时,只需添加对应的CASE WHEN分支即可,无需新增JOIN语句
  • 结果与原LEFT JOIN逻辑一致:缺失的字段值用COALESCE替换为-,和原需求的输出格式匹配

补充说明

如果不需要将NULL替换为-,可以去掉COALESCE函数,直接使用MAX(CASE ...)即可,结果会显示NULL。

内容的提问来源于stack exchange,提问作者Master

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:45:07