SQL-запрос для получения топ-2 записей группы - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть следующая таблица ввода

Source  EventType
A        X
A        X
A        X
A        Y
A        Y
A        Z
B        L
B        L
B        L
B        L
B        M
B        N
B        N

Ожидаемый результат

Source    EventType   Frequency
A          X            3
A          Y            2
B          L            4
B          N            2

Как сформировать запрос SQL, чтобы получить результат, как показано выше? Мне удалось достичь результатов, но только с одним источником за раз.

select TOP 2 eventype, count(*) as frequencey
from myEventTable 
where source = 'A'
group by eventtype
order by count(*) desc

1 Ответ

0 голосов
/ 18 сентября 2018

Мы можем использовать ROW_NUMBER здесь:

WITH cte AS (
    SELECT Source, EventType, COUNT(*) as Frequency,
        ROW_NUMBER() OVER (PARTITION BY Source ORDER BY COUNT(*) DESC) rn
    FROM myEventTable
    GROUP BY Source, Eventtype
)

SELECT Source, EventType, Frequency
FROM cte
WHERE rn <= 2;

enter image description here

Демо

Причина, по которой это работает, заключается в том, что ROW_NUMBER применяется после того, как операция GROUP BY завершена, т.е. она выполняется для групп.Затем мы можем легко ограничить 2 верхних на источник в порядке убывания частоты.

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