Ho una tabella che contiene clienti e punteggi (in base a diversi fattori, in questo caso irrilevanti; un cliente può avere più punteggi), che assomiglia a questo:
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
Il score_giver_id
è irrilevante, ma mi piace ancora a prenderlo.
Nell'esempio sopra, quando si ottiene il 50o percentile, raggruppato per customer_id, il risultato dovrebbe essere (ho scelto il 50o percentile in questo esempio, perché illustra ciò che voglio fare meglio):
customer_id | score | score_giver_id
====================================
1 | 101 | 1
2 | 131 | 3
3 | 223 | 1
Ho usato il metodo descritto qui .
Ho bisogno di ottenere il valore che è al 10 ° percentile, rispettivamente al 90 ° percentile in PostgreSQL. Ho visto che da 9.4 esiste una ntile
funzione, ma non capisco davvero come funziona, cosa fa e se mi aiuta.
Ho trovato un bel frammento per MySQL, che funziona (anche se ci sono alcuni avvertimenti), ma mi piacerebbe usare le funzioni integrate se disponibili (per MySQL non ce ne sono, quindi lo snippet).