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

SQL语句修正需求:跨表提取日期关联列结果异常

修正后的SQL语句及问题分析

问题原因

你的SQL同时左连接cases_asgn和lor_rcv两个表,会导致两个表的记录形成笛卡尔积,使得COUNT统计时重复计算记录,最终结果不符合预期。

方案一:提前聚合子查询(推荐)

这种方式先分别对两个业务表按日期完成统计,再与日期表关联,从根源避免笛卡尔积问题:

SELECT
    dd.dates,
    COALESCE(lor.LOR_Received, 0) AS LOR_Received,
    COALESCE(asg.Cases_Asgn, 0) AS Cases_Asgn
FROM
    jup_nipo_analytics_fms_workspace.dimdate dd
LEFT JOIN (
    SELECT
        LOR_Receipt_Dt,
        COUNT(cocom) AS LOR_Received
    FROM
        jup_nipo_analytics_fms_workspace.lor_rcv
    GROUP BY
        LOR_Receipt_Dt
) lor ON lor.LOR_Receipt_Dt = dd.dates
LEFT JOIN (
    SELECT
        Caseasgn_Dt,
        COUNT(Case) AS Cases_Asgn
    FROM
        jup_nipo_analytics_fms_workspace.cases_asgn
    GROUP BY
        Caseasgn_Dt
) asg ON asg.Caseasgn_Dt = dd.dates
WHERE
    dd.dates = '4/27/2023'
  • COALESCE函数用于处理某日期在对应业务表无数据的情况,确保返回0而非NULL。

方案二:使用COUNT(DISTINCT)(适用于有唯一主键的场景)

如果cases_asgn和lor_rcv表存在唯一主键字段(比如id),可以通过去重计数避免重复统计:

SELECT
    dd.dates,
    COUNT(DISTINCT lor.id) AS LOR_Received, -- 替换为lor表实际唯一主键
    COUNT(DISTINCT asg.id) AS Cases_Asgn    -- 替换为asg表实际唯一主键
FROM
    jup_nipo_analytics_fms_workspace.dimdate dd
LEFT JOIN jup_nipo_analytics_fms_workspace.cases_asgn asg ON asg.Caseasgn_Dt = dd.dates
LEFT JOIN jup_nipo_analytics_fms_workspace.lor_rcv lor ON lor.LOR_Receipt_Dt = dd.dates
WHERE
    dd.dates = '4/27/2023'
GROUP BY
    dd.dates
  • 注意:这种方式会先产生笛卡尔积再去重,性能低于方案一,仅在无法使用子查询的场景下临时替代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:03:27