Так, с SQL функцией NTILE, про которую я писал выше, оказалось не все так просто.
Что это такое и зачем - прочитайте в отрепляенном посте выше.
Короче, если вы будете считать персентили по столбцу с NULL значениями, вы, возможно захотите не учитывать их в разбивке по персентилям.
Например, если строить персентили для компаний по числу их упоминаний на Techcrunch за последние 4 года, нет смысла учитывать тех, кого ни разу не упоминали. А таких большинство.
Чтобы это сделать, нужно создать отдельную таблицу, в которой удалить все строки, и только потом считать персентили:
Почему это нетривиально? Потому что, если вы хотите считать несколько таких персентилей (для 6 месяцев, 12, 48 ...), то вам нужно не полениться и создать несколько таких промежуточных таблиц. Иначе результаты будут неправильные.
Если меня читают не технари, сори. Пишу о том, что наболело.
Что это такое и зачем - прочитайте в отрепляенном посте выше.
Короче, если вы будете считать персентили по столбцу с NULL значениями, вы, возможно захотите не учитывать их в разбивке по персентилям.
Например, если строить персентили для компаний по числу их упоминаний на Techcrunch за последние 4 года, нет смысла учитывать тех, кого ни разу не упоминали. А таких большинство.
Чтобы это сделать, нужно создать отдельную таблицу, в которой удалить все строки, и только потом считать персентили:
WITH MENTIONS_48NTILE AS (
SELECT
domain, NTILE(100) OVER (ORDER BY -mentions_48m) mentions_48m_perc
FROM BASIC_STATS
WHERE mentions_48m > 0
)
Почему это нетривиально? Потому что, если вы хотите считать несколько таких персентилей (для 6 месяцев, 12, 48 ...), то вам нужно не полениться и создать несколько таких промежуточных таблиц. Иначе результаты будут неправильные.
Если меня читают не технари, сори. Пишу о том, что наболело.