通过将count()更改为(partition by)结果集来排序

时间:2019-10-11 17:38:55

标签: sql oracle

我试图统计每天在某些位置发生的某些交易类型。例如,如果我有两种不同类型的交易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

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

2 个答案:

答案 0 :(得分:1)

只需在分区中添加位置,就像每个日期都需要按日期排列一样,而不仅仅是按日期排列,因此分区应该使用日期中包含的位置进行

     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

答案 1 :(得分:0)

我认为以下使用group by和条件aggregate函数的查询可以解决您的问题:

select location, 
trunc(date), 
Sum(case when transaction_types = 'x' then 1 end) as x_total,
Sum(case when transaction_types = 'y' then 1 end) as y_total,
count(1) as total
from table where transaction_types in (x,y)
group by location,trunc(date);

干杯!