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

Postgresql :Как да избера първите n процента(%) записи от всяка група/категория

За да извлечете редовете въз основа на процента от броя на редовете във всяка група, можете да използвате две функции на прозореца:една за преброяване на редовете и една, за да им даде уникален номер.

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;

Пример за SQLFiddle:http://sqlfiddle.com/#!15/94fdd/1

Между другото:използвайки char почти винаги е лоша идея, защото е тип данни с фиксирана дължина, който е подплатен до определената дължина. Надявам се, че сте направили това само за настройка на примера и да не го използвате в истинската си таблица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравнение на типовете колони на базата данни в MySQL, PostgreSQL и SQLite? (Кръстосано картографиране)

  2. Обявяване на repmgr 2.0RC2

  3. Как да защитите вашите PostgreSQL бази данни от кибератаки с SQL защитна стена

  4. Как да импортирам данни от CSV файл в PostgreSQL таблица?

  5. Spark Dataframes UPSERT към таблица Postgres