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

PostgreSQL查询如何显示所有预定义事件类型(含无数据项)

解决左连接后仍无法显示无数据事件类型的问题

问题出在你把日期过滤条件放在了WHERE子句中,这会直接过滤掉左连接后生成的、没有匹配到my_events数据的行(这类行的event_date为NULL),导致最终只能看到有数据的Event B和Event C。

正确的做法是将日期筛选条件移至LEFT JOIN的ON子句中,这样只会在匹配my_events表数据时应用日期过滤,不会影响CTE预定义的所有事件类型行。

以下是可直接使用的SQL代码:

WITH all_event_types AS (
    SELECT 'Event A' AS event_type
    UNION ALL
    SELECT 'Event B' AS event_type
    UNION ALL
    SELECT 'Event C' AS event_type
    UNION ALL
    SELECT 'Event D' AS event_type
)
SELECT 
    a.event_type,
    COUNT(e.event_id) AS event_count,
    COALESCE(SUM(e.event_duration), 0) AS total_duration
FROM all_event_types a
LEFT JOIN my_events e
    ON a.event_type = e.event_type
    AND e.event_date >= '2023-05-01'  -- 日期条件放在ON子句而非WHERE
GROUP BY a.event_type
ORDER BY a.event_type;

关键细节说明:

  • all_event_types CTE预定义了全部4种事件类型,作为查询的基础数据集,确保所有类型都能被展示。
  • 日期条件放在ON子句:仅筛选my_events表中2023-05-01之后的记录进行匹配,未匹配到的类型会保留行结构,对应字段值为NULL。
  • COALESCE函数将SUM计算后的NULL值转换为0,满足无数据项显示0的需求。
  • 按CTE中的event_type分组,保证所有预定义类型都出现在最终结果里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:22:07