J'ai un tableau qui contient les clients et les scores (basé sur différents facteurs, non pertinent dans ce cas; un client peut avoir plusieurs scores), qui ressemble à ceci:
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
Le score_giver_id
n'est pas pertinent, mais j'aimerais quand même le chercher.
Dans l'exemple ci-dessus, lors de l'obtention du 50e centile, groupé par customer_id, le résultat devrait être (j'ai choisi le 50e centile dans cet exemple, car il illustre ce que je veux faire mieux):
customer_id | score | score_giver_id
====================================
1 | 101 | 1
2 | 131 | 3
3 | 223 | 1
J'ai utilisé la méthode décrite ici .
J'ai besoin d'obtenir la valeur qui se situe au 10e centile, respectivement au 90e centile dans PostgreSQL. J'ai vu que depuis 9.4 il y a une ntile
fonction, mais je ne comprends pas vraiment comment cela fonctionne, ce qu'elle fait et si cela m'aide.
J'ai trouvé un bel extrait pour MySQL, qui fonctionne (même s'il y a quelques mises en garde), mais j'aimerais utiliser des fonctions intégrées si disponibles (pour MySQL il n'y en a pas, d'où l'extrait).
la source