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

COUNT DISTINCT统计异常:每日唯一CNTR_NBR计数不符

问题:统计当日唯一CNTR_NBR数量的SQL结果不符合预期

需求为统计当日唯一的CNTR_NBR数量,执行以下SQL语句后返回结果不符合预期:

SELECT TO_CHAR(BEGIN_DATE, 'DD-MM-YYYY') "DATE"
        , TRAN_TYPE_DESC
        , MENU_OPTN_NAME
        , REASON_CODE
        , REF_FIELD_3  "RC_REF_1"
        , COUNT (DISTINCT CNTR_NBR) AS LPNS
FROM WMS2018.BAP_PROD_TRKG_TRAN_VIEW
WHERE MENU_OPTN_NAME = 'Receive and Sort DCV'
      AND TRUNC(BEGIN_DATE) = TRUNC(SYSDATE)
GROUP BY BEGIN_DATE
        , TRAN_TYPE_DESC
        , MENU_OPTN_NAME
        , REASON_CODE
        , REF_FIELD_3
    ORDER BY 1
    ;

当前返回结果显示:同一日期下有多条记录,每条记录对应不同时间点的分组,LPNS列是各子分组内的唯一CNTR_NBR计数,而非当日整体或指定维度下的当日统计值。

问题原因

原SQL的GROUP BY子句使用了未截断的BEGIN_DATE(包含时分秒信息),即使是同一天的记录,只要时间戳不同就会被拆分为独立分组,导致统计结果碎片化,无法得到日维度的唯一CNTR_NBR数量。

修正方案

根据实际需求选择以下两种修正方式:

1. 仅统计当日整体唯一CNTR_NBR数量

若无需按其他维度分组,仅需当日总计数:

SELECT TO_CHAR(TRUNC(BEGIN_DATE), 'DD-MM-YYYY') "DATE",
       COUNT(DISTINCT CNTR_NBR) AS LPNS
FROM WMS2018.BAP_PROD_TRKG_TRAN_VIEW
WHERE MENU_OPTN_NAME = 'Receive and Sort DCV'
  AND TRUNC(BEGIN_DATE) = TRUNC(SYSDATE)
GROUP BY TRUNC(BEGIN_DATE)
ORDER BY 1;

2. 按指定维度+日维度统计

若需保留TRAN_TYPE_DESC等维度分组,同时按日统计各分组下的唯一CNTR_NBR数量:

SELECT TO_CHAR(TRUNC(BEGIN_DATE), 'DD-MM-YYYY') "DATE",
       TRAN_TYPE_DESC,
       MENU_OPTN_NAME,
       REASON_CODE,
       REF_FIELD_3 "RC_REF_1",
       COUNT(DISTINCT CNTR_NBR) AS LPNS
FROM WMS2018.BAP_PROD_TRKG_TRAN_VIEW
WHERE MENU_OPTN_NAME = 'Receive and Sort DCV'
  AND TRUNC(BEGIN_DATE) = TRUNC(SYSDATE)
GROUP BY TRUNC(BEGIN_DATE),
         TRAN_TYPE_DESC,
         MENU_OPTN_NAME,
         REASON_CODE,
         REF_FIELD_3
ORDER BY 1;

修正后通过TRUNC(BEGIN_DATE)将日期字段截断至日维度,确保同一天的记录归为同一分组,可得到符合预期的统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:07:54