如何解决如何从具有重复项的 GROUP BY 中求和
我正在计算四组内每个人的平均订单数,我有以下 SQL
SELECT TO_DATE(ORDER_TIME AT TIME ZONE 'UTC' AT TIME ZONE 'US/Pacific','YYYY-MM-DD'),GROUP_P,COUNT(CASE WHEN ORDER_TIME IS NOT null
THEN ORDER_ID END) AS Numerator,COUNT(DISTINCT
CASE WHEN ORDER_TIME IS NOT null
THEN PERSON_ID END) AS Denominator
FROM ORDER_TAB
WHERE TO_DATE(ORDER_TIME AT TIME ZONE 'UTC' AT TIME ZONE 'US/Pacific','YYYY-MM-DD')
BETWEEN DATEADD( day,-1,current_Date) AND current_Date
GROUP BY 1,2
我的结果是这样的
to_date group_p numerator denominator
2021-06-01 A 28 20
2021-06-01 B 5 5
2021-06-01 C 1577 1025
2021-06-01 D 1010 765
因为一个 person_id
可以在不同的组中,如果我从上表总结,由于潜在的重复,我将无法获得准确的分母值。在我下面的代码中,我删除了 group by
,numerator
总结相同,但 denominator
越来越少。
SELECT TO_DATE(ORDER_TIME AT TIME ZONE 'UTC' AT TIME ZONE 'US/Pacific',current_Date) AND current_Date
GROUP BY 1
to_date numerator denominator
2021-06-01 2620 1699
由于我们的报告要求,我必须按照 group_p
列中显示的方式保留输出。
从输出总结时使用准确的 1699
的最佳方法是什么?
解决方法
下面的查询将对分母列的 person_id 计数一次(按升序排列的第一组)。为此,我使用了带有通用表表达式的 row_number() 窗口排名函数。
with cte as
(
SELECT GROUP_P,ORDER_TIME,row_number()over(partition by person_id order by group_p) rnk
FROM ORDER_TAB
WHERE TO_DATE(ORDER_TIME AT TIME ZONE 'UTC' AT TIME ZONE 'US/Pacific','YYYY-MM-DD')
BETWEEN DATEADD( day,-1,current_Date) AND current_Date
)
select TO_DATE(ORDER_TIME AT TIME ZONE 'UTC' AT TIME ZONE 'US/Pacific','YYYY-MM-DD'),GROUP_P,COUNT(CASE WHEN ORDER_TIME IS NOT null
THEN ORDER_ID END) AS Numerator,COUNT(CASE WHEN ORDER_TIME IS NOT null and rnk=1
THEN PERSON_ID END) AS Denominator
from cte
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。