Приоткрывайм завесу тайны: о чём мы пишем в канале 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.