sql >> Databasteknik >  >> RDS >> PostgreSQL

postgres:få topp n förekomster av ett värde inom varje grupp

Något så här:

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;

Observera att jag ersatte user med userid eftersom det är en dålig vana att använda reserverade ord för kolumner.

Här är en SQLFiddle:http://sqlfiddle.com/#!12/ec3ec/1



  1. docker-compose rails rake db:reset misslyckas, kan inte släppa den för närvarande öppna databasen

  2. Hur kör man flera SQL-frågor i MySQL Workbench?

  3. Hämtar utdatabuffert från DBMS_OUTPUT.GET_LINES i C#

  4. Att överleva en Oracle-revision