Расчет децильных интервалов в снежинке

У меня есть относительно простой (надеюсь) вопрос Snowflake SQL, на который я не смог ответить для себя онлайн. Для простоты, скажем так, у меня есть одна простая таблица со столбцом идентификаторов и столбцом значений.

   Id |   Value
-------------------
  A   |  100 | 
  B   |  245 | 
  C   |  80  | 
  D   |  370 | 
  E   |  65  | 

Я хотел бы рассчитать децильные сегменты для столбца значения. До сих пор я нашел только команды, которые будут добавлять децильный ранг в качестве дополнительного столбца, ранжируя каждое значение между 0-9. Однако это не совсем то, что мне нужно. Мне больше интересно узнать, что на самом деле представляют собой эти децили. Например, для дециля 0 я хотел бы знать интервал, для которого он охватывает, скажем, что-то похожее, например, на [0,99). Кто-нибудь знает, как генерировать эти данные? Спасибо!

1 ответ

Решение

Вы можете использовать агрегацию:

select tile, min(value), max(value)
from (select t.*, ntile(10) over (order by value) as tile
      from t
     ) t
group by tile
order by tile;

Обратите внимание, что ntile() может не справиться с галстуками так, как вы ожидаете. Но дело в том, что если вы можете получить логику в дополнительном столбце, то агрегация получит нужные вам диапазоны.

Другие вопросы по тегам