CROSSTAB 透视表:将行转列并处理多列聚合
使用 tablefunc 扩展的 crosstab 函数,将分类汇总结果从行形式转为列形式,解决标准 SQL 无法动态列名的痛点。 · 难度:入门 · +10XP
CROSSTAB 透视表:将行转列并处理多列聚合
PIVOT 在许多数据库中缺失。PostgreSQL 通过 crosstab() 实现行转列,但要求输入按行排序且第二列是分类、第三列是值。本教程演示如何构建正确排序的 SQL 作为 crosstab 输入,并处理多个度量值。
-- 启用扩展
CREATE EXTENSION IF NOT EXISTS tablefunc;
-- 按月份和产品类别统计销售额并转为列
SELECT * FROM crosstab(
'SELECT date_trunc(''month'', sale_date)::date AS month,
category,
sum(amount)::numeric
FROM sales
GROUP BY month, category
ORDER BY month, category',
'VALUES (''Electronics''), (''Clothing''), (''Books'')'
) AS ct(month date, electronics numeric, clothing numeric, books numeric);