sql >> Base de Datos >  >> RDS >> PostgreSQL

postgres:obtenga las n principales ocurrencias de un valor dentro de cada grupo

Algo como esto:

select *
from (
    select userid, 
           letter, 
           dense_rank() over (partition by userid order by count(*) desc) as rnk
    from letters
    group by userid, letter
) t
where rnk <= 2
order by userid, rnk;

Tenga en cuenta que reemplacé user con userid porque usar palabras reservadas para las columnas es un mal hábito.

Aquí hay un SQLFiddle:http://sqlfiddle.com/#!12/ec3ec/1