Mam tabelę, która zawiera klientów i wyniki (oparte na różnych czynnikach, nieistotne w tym przypadku; klient może mieć wiele wyników), który wygląda następująco:
customer_id | score | score_giver_id
====================================
1 | 100 | 1
1 | 102 | 1
1 | 101 | 1
1 | 140 | 1
2 | 131 | 3
1 | 44 | 1
3 | 223 | 1
3 | 1 | 2
3 | 201 | 1
3 | 211 | 1
3 | 231 | 1
3 | 243 | 1
To nie score_giver_id
ma znaczenia, ale nadal chciałbym je pobrać.
W powyższym przykładzie podczas pobierania 50 percentyla pogrupowanego według ID_klienta powinien być wynik (wybrałem 50 percentyl w tym przykładzie, ponieważ ilustruje to, co chcę zrobić lepiej):
customer_id | score | score_giver_id
====================================
1 | 101 | 1
2 | 131 | 3
3 | 223 | 1
Użyłem opisanej tutaj metody .
Muszę uzyskać wartość, która wynosi 10 percentyl, odpowiednio 90 percentyl w PostgreSQL. Widziałem to od wersji 9.4, ale jest taka ntile
funkcja, ale tak naprawdę nie rozumiem, jak to działa, co robi i czy mi to pomaga.
Znalazłem ładny fragment kodu dla MySQL, który działa (nawet jeśli są pewne zastrzeżenia), ale chciałbym użyć wbudowanych funkcji, jeśli są dostępne (dla MySQL nie ma, stąd fragment).
źródło