Обложка канала

LEFT JOIN

5709 @leftjoin

Канал Николая Валиотти об аналитике и визуализации данных, data science и BI

LEFT JOIN

3 года назад
Открыть в
Приоткрывайм завесу тайны: о чём мы пишем в канале FULL JOIN? Мы решили поделиться с вами частью контента, который мы публикуем в приватном канале. На прошлой неделе мы публиковали статью, в которой разбирались в сути ранжирующих функций в SQL. Давайте разберемся в каждой из ранжирующих функций 📍 ROW_NUMBERфункция, которая возвращает номер строки внутри окна. С помощью данной функции можно задать нумерацию, которая будет отличаться от порядка сортировки строк результирующего набора, создать несквозную нумерацию, т.е. выделить группы из общего множества строк и сделать отдельную нумерацию для каждой группы, а также использовать несколько способов нумерации одновременно. Помимо ROW_NUMBER, есть и другие ранжирующие функции: 📍 RANKфункция, которая возвращает ранг каждой строки. Погодите, а что такое ранг? Cтроки, которые имеют одинаковые значения в столбцах, по которым выполняется упорядочивание, получают одинаковые номера - ранги. Нумерация рангов начинается с единицы. В случае использования RANK следующим номером после строк с одинаковым рангом будет номер строки (ROW_NUMBER). 📍 DENSE_RANKфункция, которая также возвращает ранг каждой строки. В отличие от RANK, при использовании этой функции следующим номером после строк с одинаковым рангом будет ранг на единицу выше. Таким образом, номера не пропускаются, и потому такой ранг называется “плотным“. 📍 NTILE — функция, которая распределяет строки окна на заданное в качестве параметра количество групп. Нумерация групп начинается с единицы. Если общее количество строк не делится нацело на заданный параметр, то группы формируются двух размеров с разницей в единицу. Причем группы большего размера идут перед меньшими группами. Например, если общее число строк равно 10, а число групп равно 4, то первые две группы будут состоять из 3 строк, а последние две — из 2. 📍 PERCENT_RANK — функция, которая возвращает относительный ранг строки в окне. Она вычисляет долю строк, ранг которых меньше, чем у текущей. Для подсчета используется формула (rank - 1) /([количество строк в окне] - 1). Возвращаемое значение лежит в отрезке [0, 1]. Если в окне только одна строка, то функция вернет 0. 📍 CUME_DIST — функция, которая возвращает кумулятивное распределение величины в пределах набора значений. Она вычисляет долю строк, ранг которых не больше, чем у текущей. Для подсчета используется формула N/[количество строк в окне], где N - количество строк, ранг которых меньше либо равен рангу текущей строки, включая ее саму. Возвращаемое значение лежит в полуинтервале (0, 1]. Круто, а как их использовать? По-разному. Например, с их помощью можно решить задачу ранжирования пользователей относительно их возраста или даты регистрации. Если хотите изучить больше пояснений по разным функциям и их использованию, разобрать примеры запросов к конкретным данным, а также получить доступ в нашу Redash песочницу, чтобы запустить запросы со всеми этими функциями и разобрать их «по запчастям», то вы всегда можете оформить подписку на FULL JOIN.