Tengo una tabla que contiene clientes y puntajes (basada en diferentes factores, irrelevantes en este caso; un cliente puede tener múltiples puntajes), que se ve así:
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
El score_giver_id
es irrelevante, pero todavía me gustaría buscarlo.
En el ejemplo anterior, al obtener el percentil 50, agrupado por customer_id, el resultado debería ser (elegí el percentil 50 en este ejemplo, porque ilustra lo que quiero hacer mejor):
customer_id | score | score_giver_id
====================================
1 | 101 | 1
2 | 131 | 3
3 | 223 | 1
Usé el método descrito aquí .
Necesito obtener el valor que está en el percentil 10, respectivamente, en el percentil 90 en PostgreSQL. He visto que desde 9.4 hay una ntile
función, pero realmente no entiendo cómo funciona, qué hace y si me ayuda.
He encontrado un buen fragmento para MySQL, que funciona (a pesar de que hay algunas advertencias), pero me gustaría usar funciones incorporadas si están disponibles (para MySQL no hay ninguno, de ahí el fragmento).