sql - 通过将 count () 更改为 (partition by ) 结果集来排序
问题描述
我正在尝试计算某些地点每天发生的某些交易类型。例如,如果我有两种不同类型的交易 x,y 以及日期和地点 (NY),我试图查看该日期和该地点发生了多少 x 交易,发生了多少 y 交易和盛大全部的。看起来不错,但是当我使用按日期顺序排序时,结果会发生变化,并且相同日期的所有位置都有相同的计数。有人可以在这里解释一下为什么会这样。对于不同的位置和相同的日期,我得到相同的计数。
我使用了下面的逻辑
select location, trunc(date),
count(location) over (partition by date) as grand_total
from table
where transaction_types in (x,y)
ORDER BY DATE DESC
预期结果应该是:
locaton date grandtotal
NY 1/1/2019 5
NJ 1/1/2019 7
实际的
LOCATION DATE GRANDTOTAL
NY 1/1/2019 5
NJ 1/1/2019 5
对于不同的位置和相同的日期,我得到相同的计数。
解决方案
只需在分区中添加位置,因为您希望每个位置都有日期,而不仅仅是日期,因此分区应该使用日期中包含的位置来完成
select location, trunc(date),
count(location)
over (partition by location, date) as
grand_total
from table where transaction_types in
(x,y)
ORDER BY DATE DESC