PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

postgres:Top-n-Vorkommen eines Werts in jeder Gruppe abrufen

Etwa so:

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;

Beachten Sie, dass ich user ersetzt habe mit userid weil es eine schlechte Angewohnheit ist, reservierte Wörter für Spalten zu verwenden.

Hier ist ein SQLFiddle:http://sqlfiddle.com/#!12/ec3ec/1