I have a table with columns month
, name
and transaction_id
. I would like to count the number of transactions per month and name. However, for each month I want to have the top N
names with the highest transaction counts.
The following query groups by month
and name
. However the LIMIT
is applied to the complete result and not per month
:
x
SELECT
month,
name,
COUNT(*) AS transaction_count
FROM my_table
GROUP BY month, name
ORDER BY month, transaction_count DESC
LIMIT N
Does anyone have an idea how I can get the top N
results per month
?
Advertisement
Answer
Use 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