Eu tenho uma tabela que contém clientes e pontuações (com base em diferentes fatores, irrelevantes neste caso; um cliente pode ter várias pontuações), com a seguinte aparência:
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
O score_giver_id
é irrelevante, mas eu ainda gostaria de buscá-lo.
No exemplo acima, ao obter o 50º percentil, agrupado por customer_id, o resultado deve ser (escolhi o 50º percentil neste exemplo, porque ilustra o que eu quero fazer melhor):
customer_id | score | score_giver_id
====================================
1 | 101 | 1
2 | 131 | 3
3 | 223 | 1
Eu usei o método descrito aqui .
Preciso obter o valor que está no percentil 10, respectivamente no percentil 90 no PostgreSQL. Eu vi que desde a 9.4 existe uma ntile
função, mas eu realmente não entendo como ela funciona, o que faz e se isso me ajuda.
Encontrei um bom trecho para o MySQL, que funciona (mesmo que haja algumas ressalvas), mas eu gostaria de usar funções internas, se disponíveis (para o MySQL não há nenhuma, portanto, o trecho).
fonte