PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

postgres:ottieni le prime n occorrenze di un valore all'interno di ciascun gruppo

Qualcosa del genere:

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;

Nota che ho sostituito user con userid perché usare parole riservate per le colonne è una cattiva abitudine.

Ecco un SQLFiddle:http://sqlfiddle.com/#!12/ec3ec/1