sql >> Databáze >  >> RDS >> PostgreSQL

postgres:získat top n výskytů hodnoty v každé skupině

Něco takového:

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;

Všimněte si, že jsem nahradil user s userid protože používání vyhrazených slov pro sloupce je špatný zvyk.

Zde je SQLFiddle:http://sqlfiddle.com/#!12/ec3ec/1



  1. Získejte průměrný čas mezi časy v SQL

  2. Jak zobrazit posledních 10 minut staré záznamy z mysql

  3. Atomikos:data se při používání PostgreSQL neukládají

  4. načíst více csv do jedné tabulky pomocí SQLLDR