SQL заказ с равным размером группы - PullRequest
1 голос
/ 05 февраля 2020

У меня есть таблица со столбцами month, name и transaction_id. Я хотел бы посчитать количество транзакций в месяц и имя. Тем не менее, для каждого месяца я хочу иметь верхние N имена с наибольшим количеством транзакций.

Следующие группы запросов по month и name. Однако LIMIT применяется к полному результату, а не к month:

SELECT
    month,
    name,
    COUNT(*) AS transaction_count
FROM my_table
GROUP BY month, name
ORDER BY month, transaction_count DESC
LIMIT N

Кто-нибудь знает, как я могу получить лучшие N результаты по month?

1 Ответ

1 голос
/ 05 февраля 2020

Использование row_number():

SELECT month, name, transaction_count
FROM (SELECT month, name, COUNT(*) AS transaction_count,
             ROW_NUMBER() OVER (PARTITION BY month ORDER BY COUNT(*) DESC) as seqnum
      FROM my_table
      GROUP BY month, name
     ) mn
WHERE seqnum <= N
ORDER BY month, transaction_count DESC
...