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

如何编写SQL查询按日期分组求和指定两类DPD余额数据?

问题分析与解决方案

数据表示例

指标(Metric)分数区间(Score Range)日期(Date)数值(value)
30 DPD530-579Apr-1742.5
60 DPD580-619Oct-1860.5

你的核心需求是:新增一列,计算**分数区间为'530-579'**的30 DPD与60 DPD的数值之和,并按日期(PRD_END_DATE)分组。现有代码的问题在于SELECT列与GROUP BY不匹配,且没有实现“新增列”的需求,以下是两种场景的解决方案:


场景1:保留原始数据行,新增合计列

如果需要保留每一行的原始信息,同时新增列展示对应日期下符合条件的数值总和,使用窗口函数实现:

SELECT
    PRODUCT,
    METRIC,
    SCORE,
    PRD_END_DATE,
    value,
    -- 按日期分组,仅计算分数区间530-579的30/60 DPD数值之和
    SUM(CASE 
          WHEN SCORE = '530-579' AND METRIC IN ('30 DPD', '60 DPD') 
          THEN value 
          ELSE 0 
        END) OVER (PARTITION BY PRD_END_DATE) AS total_30_60_dpd_530_579
FROM INDUSTRY
-- 可选:如果只关注这两类指标,保留WHERE条件
WHERE METRIC IN ('30 DPD', '60 DPD')

场景2:仅按日期分组展示合计结果

如果只需要按日期聚合后的总和,调整分组逻辑确保语法合规:

SELECT
    PRD_END_DATE,
    SUM(value) AS total_30_60_dpd_530_579
FROM INDUSTRY
WHERE 
    METRIC IN ('30 DPD', '60 DPD') 
    AND SCORE = '530-579'
GROUP BY PRD_END_DATE

关键说明

  • 场景1的窗口函数SUM() OVER (PARTITION BY PRD_END_DATE)可以在不改变原始行结构的前提下,计算每个日期分组的目标总和;
  • CASE WHEN用来精准筛选符合分数区间和指标类型的数据,排除无关行的干扰;
  • 场景2是标准分组聚合,确保SELECT中的列要么在GROUP BY中,要么是聚合函数的结果,避免语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:30:56