У меня есть таблица, которая содержит клиентов и оценки (основанные на различных факторах, не относящихся к делу в данном случае; клиент может иметь несколько оценок), которая выглядит следующим образом:
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
Это не score_giver_id
имеет значения, но я все еще хотел бы получить его.
В приведенном выше примере при получении 50-го процентиля, сгруппированного по customer_id, результат должен быть (я выбрал 50-й процентиль в этом примере, потому что он иллюстрирует, что я хочу сделать лучше):
customer_id | score | score_giver_id
====================================
1 | 101 | 1
2 | 131 | 3
3 | 223 | 1
Я использовал метод, описанный здесь .
Мне нужно получить значение, которое находится на 10-м процентиле, соответственно на 90-м процентиле в PostgreSQL. Я видел, что с 9.4 есть ntile
функция, но я не очень понимаю, как она работает, что она делает и помогает ли она мне.
Я нашел хороший фрагмент для MySQL, который работает (хотя есть некоторые предостережения), но я хотел бы использовать встроенные функции, если они доступны (для MySQL их нет, следовательно, фрагмент).
источник