PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

postgres :obtenir les n premières occurrences d'une valeur dans chaque groupe

Quelque chose comme ça :

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;

Notez que j'ai remplacé user avec userid car utiliser des mots réservés pour les colonnes est une mauvaise habitude.

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