PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgresql:come seleziono le prime n voci percentuali (%) da ciascun gruppo/categoria

Per recuperare le righe in base alla percentuale del numero di righe in ogni gruppo è possibile utilizzare due funzioni della finestra:una per contare le righe e una per attribuire loro un numero univoco.

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;

Esempio di SQLFiddle:http://sqlfiddle.com/#!15/94fdd/1

A proposito:usando char è quasi sempre una cattiva idea perché è un tipo di dati a lunghezza fissa che viene riempito alla lunghezza definita. Spero che tu l'abbia fatto solo per impostare l'esempio e non usarlo nella tua tabella reale.