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

PostgreSQL GROUP BY查询行转列需求:状态统计转为列展示

解决方案:使用条件聚合实现行转列

要实现将每个日期的不同状态统计转为列展示,最简洁高效的方式是条件聚合——在聚合函数中结合CASE语句,针对每个状态单独统计数量,最终每个日期只会返回一行结果。

修改后的SQL语句

SELECT
    concat(
        EXTRACT(YEAR FROM "BEAUFTRAGUNG_DATUM"),
        '-',
        TO_CHAR(EXTRACT(MONTH FROM "BEAUFTRAGUNG_DATUM"), 'fm00')
    ) AS "DATUM",
    -- 统计OTHER状态数量,无数据则返回0
    SUM(CASE
        WHEN "STATUS" IN ('....', '...') THEN 1
        ELSE 0
    END) AS "OTHER",
    -- 统计BESTELLT状态数量
    SUM(CASE
        WHEN "STATUS" = 'BESTELLT' THEN 1
        ELSE 0
    END) AS "BESTELLT",
    -- 统计VOR_PRODUKTION状态数量
    SUM(CASE
        WHEN "STATUS" = 'VOR_PRODUKTION' THEN 1
        ELSE 0
    END) AS "VOR_PRODUKTION"
FROM
    PUBLIC."TXS"
WHERE
    "FLAG_POS" = '1'
GROUP BY
    "DATUM"
ORDER BY
    "DATUM" ASC;

关键说明

  1. 条件聚合逻辑:每个状态列通过SUM(CASE ... END)实现——当行数据匹配目标状态时返回1,否则返回0,最终求和得到该状态的总数量,天然支持无数据时返回0。
  2. 性能优势:相比JOIN多张子查询结果的方式,条件聚合只需扫描一次原表,执行效率更高,代码也更简洁易维护。
  3. 日期分组:保留了你原有的日期格式化逻辑,确保DATUM字段的格式与需求一致。

如果偏好使用COUNT替代SUM,可以写成COALESCE(COUNT(CASE WHEN ... THEN 1 END), 0),但SUM的写法更直接,无需额外处理NULL值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:05:25