统计无重复记录的总数

Count total without duplicate records

我有一个 table,其中包含以下列:TrackingStatus、Year、Month、Order、Notes

我需要计算每年和每月的跟踪状态总数。

例如,如果 table 包含以下命令:

TrackingStatus Year Month Order Notes
F 2020 1 33
F 2020 1 33 DFF
E 2020 2 36 xxx
A 2021 3 34 X1
A 2021 3 34 DD
A 2021 3 88
A 2021 2 45

结果应该是:

• 跟踪 F ,2020 年,第 1 个月,总数将为 1(因为它是同一年、同一月和同一订单)。
• 跟踪 A,2021 年,第 2 个月,总数将为 1。 (因为同年同月同序的记录只有一条)
• Tracking A,2021 年第 3 个月,总数为 2。 (因为同年同月有两笔订单)

所以预期的 SELECT 输出将是这样的:

TrackingStatus Year Month Total
F 2020 1 1
E 2020 2 1
A 2021 2 1
A 2021 3 2

我试图使用 group by 但它会计算在我的场景中错误的记录数。

如何在不计算“重复”记录的情况下获得每个月的总订单数?

谢谢

您可以使用 COUNT DISTINCT 聚合函数,而 COUNT 允许您计算值,但 DISTINCT 条件将允许每个值只计算一次。

SELECT TrackingStatus,
       Year,
       Month,
       COUNT(DISTINCT Order) AS Total
FROM tab
GROUP BY TrackingStatus,
         Year,
         Month
ORDER BY Year, 
         Month

Here 您可以在 MySQL 环境中找到经过测试的解决方案,尽管这应该适用于许多 DBMS。