PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql :Jak wybrać pierwsze n procent (%) wpisów z każdej grupy/kategorii?

Aby pobrać wiersze na podstawie procentu liczby wierszy w każdej grupie, możesz użyć dwóch funkcji okna:jednej do zliczania wierszy i drugiej do nadawania im unikalnej liczby.

select gp,
       val
from (
  select gp, 
         val,
         count(*) over (partition by gp) as cnt,
         row_number() over (partition by gp order by val desc) as rn
  from temp
) t
where rn / cnt <= 0.75;

Przykład SQLFiddle:http://sqlfiddle.com/#!15/94fdd/1

Btw:używając char jest prawie zawsze złym pomysłem, ponieważ jest to typ danych o stałej długości, który jest dopełniany do określonej długości. Mam nadzieję, że zrobiłeś to tylko w celu ustawienia przykładu i nie używaj go na swoim prawdziwym stole.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć wartość typu enum w postgresie?

  2. Kolumna zapytania SQL nie istnieje błąd

  3. Automatyzacja Barmana z Puppet:it2ndq/barman (część druga)

  4. Interwał dynamiczny (na podstawie kolumny)

  5. PostgreSQL - Zmień nazwę bazy danych