Funkcja ntile
jest tutaj bardzo przydatna. Mam tabeli test_temp
:
select * from test_temp
score
integer
3
5
2
10
4
8
7
12
select score, ntile(4) over (order by score) as quartile from temp_test;
score quartile
integer integer
2 1
3 1
4 2
5 2
7 3
8 3
10 4
12 4
ntile(4) over (order by score)
nakazuje kolumny przez wynik, dzieli je na cztery grupy nawet (jeśli liczba dzieli równomiernie) i przypisuje numer grupy w oparciu o zlecenia.
Ponieważ mam tutaj 8 liczb, reprezentują one 0, 12,5, 25, 37,5, 50, 62, 50, 75 i 87,5 percentyla. Jeśli więc przyjmę tylko wyniki, gdzie quartile
wynosi 2, będę miał 25 i 37,5 percentyla.
with ranked_test as (
select score, ntile(4) over (order by score) as quartile from temp_test
)
select min(score) from ranked_test
where quartile = 2
group by quartile;
powraca 4
, trzeci najwyższy numer na liście 8.
jeśli miał większy stół i używane ntile(100)
kolumna filtrować na byłaby percentyla, i można używać tego samego zapytania jak powyżej.
Czy wypróbowałeś 'percent_rank()', 'cume_dist()' lub 'ntile()'? Szczegóły [tutaj] (http://www.postgresql.org/docs/current/static/functions-window.html). –
Zobacz także: http: // stackoverflow.com/a/14309370/330315 –
Ach, znalazłem inny wpis przepełnienia stosu, ale nie utworzyłem funkcji sortowania tablic. Teraz działa. Pytanie to może zostać zamknięte lub usunięte. – Codek