Так, с SQL функцией NTILE, про которую я писал выше, оказалось не все так просто.



Что это такое и зачем - прочитайте в отрепляенном посте выше.



Короче, если вы будете считать персентили по столбцу с 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 ...), то вам нужно не полениться и создать несколько таких промежуточных таблиц. Иначе результаты будут неправильные.



Если меня читают не технари, сори. Пишу о том, что наболело.