PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

postgres:obtém as principais n ocorrências de um valor dentro de cada grupo


Algo assim:
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;

Observe que substituí user com userid porque usar palavras reservadas para colunas é um mau hábito.

Aqui está um SQLFiddle:http://sqlfiddle.com/#!12/ec3ec/1