Input table:events
month user 2020-11 user_1 2020-11 user_5 2020-11 user_3 2020-12 user_2 2020-10 user_4 2020-09 user_6
GOAL
- I want
max(distinct user)
grouped bymonth
column. - my final result need two columns one is
month
and another one ismax_count
I need output similar to this
month max_count 2020-11 3
I followed some approach
Approach1:
select max(cnt) max_count from ( select month, count(distinct user) as cnt from events group by 1 )
if i follow this approach, it is just giving me only max_count
but i need month column as well
I know we can use something like order by
and limit
to get the result. But i dont want that hacky way.
Can anyone suggest a solution for this?
Advertisement
Answer
Use a window function:
select month, cnt from ( select month, count(distinct "user") as cnt, dense_rank() over (order by count(distinct "user") desc) as rnk from events group by month ) t where rnk = 1;
user
is a reserved keyword in SQL and should be quoted (or better: find a different name)