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

postgres:få top n forekomster af en værdi inden for hver gruppe

Noget som dette:

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;

Bemærk, at jeg erstattede user med userid fordi det er en dårlig vane at bruge reserverede ord til spalter.

Her er en SQLFiddle:http://sqlfiddle.com/#!12/ec3ec/1



  1. hvordan gemmer man pdf-rapporter automatisk i databasen?

  2. InnoDB sammensat indekseringsrækkefølge og INSERT ydeevne

  3. Laravel 4 :Hvordan får man udvalgte/specifikke kolonner i et mange til mange forhold?

  4. Jeg bliver ved med at få fejlrelationen [TABEL] eksisterer ikke