порядок путем изменения набора результатов count () over (partition by) - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь подсчитать количество типов транзакций, которые произошли в каждый день в некоторых местах. например, если у меня есть два разных типа транзакций x, y и дата и местоположение (Нью-Йорк), я пытаюсь увидеть для этой даты и для этого местоположения, сколько транзакций 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

ACTUAL

LOCATION     DATE         GRANDTOTAL
NY          1/1/2019        5
NJ          1/1/2019        5

Для разных местоположений и тех же датЯ получаю одинаковое количество.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Просто добавьте местоположение в вашем разделе, так как вы хотите иметь дату по каждому местоположению, а не только по дате, поэтому разбиение должно выполняться с местоположением, включенным в дату

     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
0 голосов
/ 11 октября 2019

Я думаю, следующий запрос, использующий 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);

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...