首页 > 解决方案 > 通过将 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

对于不同的位置和相同的日期,我得到相同的计数。

标签: sqloracle

解决方案


只需在分区中添加位置,因为您希望每个位置都有日期,而不仅仅是日期,因此分区应该使用日期中包含的位置来完成

     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

推荐阅读