PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

postgres:вземете първите n срещания на стойност във всяка група

Нещо подобно:

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;

Имайте предвид, че замених user с userid защото използването на запазени думи за колони е лош навик.

Ето един SQLFiddle:http://sqlfiddle.com/#!12/ec3ec/1



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли екраниращ синтаксис за psql променлива във функциите на PostgreSQL?

  2. Обединяване на най-новите присъединени записи на седмица

  3. Postgresql налага уникална двупосочна комбинация от колони

  4. Как да предам набор от редове от една функция в друга?

  5. Django ORM разчита неправилно PostgreSQL последователности?