Оконные функции sql что это

Учимся применять оконные функции

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Оконные функции — это мощнейший инструмент аналитика, который с легкостью помогает решать множество задач.

Если вам нужно произвести вычисление над заданным набором строк, объединенных каким-то одним признаком, например идентификатором клиента, вам на помощь придут именно они.

Можно сравнить их с агрегатными функциями, но, в отличие от обычной агрегатной функции, при использовании оконной функции несколько строк не группируются в одну, а продолжают существовать отдельно. При этом результаты работы оконных функций просто добавляются к результирующей выборке как еще одно поле. Этот функционал очень полезен для построения аналитических отчетов, расчета скользящего среднего и нарастающих итогов, а также для расчетов различных моделей атрибуции.

Принцип работы

У вас может возникнуть вопрос – «Что значит оконные?»

При обычном запросе, все множество строк обрабатывается как бы единым «цельным куском», для которого считаются агрегаты. А при использовании оконных функций, запрос делится на части (окна) и уже для каждой из отдельных частей считаются свои агрегаты.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Синтаксис

Окно определяется с помощью обязательной инструкции OVER(). Давайте рассмотрим синтаксис этой инструкции:

Теперь разберем как поведет себя множество строк при использовании того или иного ключевого слова функции. А тренироваться будем на простой табличке содержащей дату, канал с которого пришел пользователь и количество конверсий:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Откроем окно при помощи OVER() и просуммируем столбец «Conversions»:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Мы использовали инструкцию OVER() без предложений. В таком варианте окном будет весь набор данных и никакая сортировка не применяется. Появился новый столбец «Sum» и для каждой строки выводится одно и то же значение 14. Это сквозная сумма всех значений колонки «Conversions».

PARTITION BY

Теперь применим инструкцию PARTITION BY, которая определяет столбец, по которому будет производиться группировка и является ключевой в разделении набора строк на окна:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Инструкция PARTITION BY сгруппировала строки по полю «Date». Теперь для каждой группы рассчитывается своя сумма значений столбца «Conversions».

ORDER BY

Попробуем отсортировать значения внутри окна при помощи ORDER BY:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

К предложению PARTITION BY добавилось ORDER BY по полю «Medium». Таким образом мы указали, что хотим видеть сумму не всех значений в окне, а для каждого значения «Conversions» сумму со всеми предыдущими. То есть мы посчитали нарастающий итог.

ROWS или RANGE

Инструкция ROWS позволяет ограничить строки в окне, указывая фиксированное количество строк, предшествующих или следующих за текущей.

Инструкция RANGE, в отличие от ROWS, работает не со строками, а с диапазоном строк в инструкции ORDER BY. То есть под одной строкой для RANGE могут пониматься несколько физических строк одинаковых по рангу.

Обе инструкции ROWS и RANGE всегда используются вместе с ORDER BY.

В выражении для ограничения строк ROWS или RANGE также можно использовать следующие ключевые слова:

Разберем на примере:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

В данном случае сумма рассчитывается по текущей и следующей ячейке в окне. А последняя строка в окне имеет то же значение, что и столбец «Conversions», потому что больше не с чем складывать.

Комбинируя ключевые слова, вы можете подогнать диапазон работы оконной функции под вашу специфическую задачу.

Виды функций

Оконные функции можно подразделить на следующие группы:

В одной инструкции SELECT с одним предложением FROM можно использовать сразу несколько оконных функций. Давайте подробно разберем каждую группу и пройдемся по основным функциям.

Агрегатные функции

Агрегатные функции – это функции, которые выполняют на наборе данных арифметические вычисления и возвращают итоговое значение.

Пример использования агрегатных функций с оконной инструкцией OVER:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Ранжирующие функции

Ранжирующие функции – это функции, которые ранжируют значение для каждой строки в окне. Например, их можно использовать для того, чтобы присвоить порядковый номер строке или составить рейтинг.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Функции смещения

Функции смещения – это функции, которые позволяют перемещаться и обращаться к разным строкам в окне, относительно текущей строки, а также обращаться к значениям в начале или в конце окна.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Аналитические функции

Аналитические функции — это функции которые возвращают информацию о распределении данных и используются для статистического анализа.

Важно! У функций PERCENTILE_CONT и PERCENTILE_DISC, столбец, по которому будет происходить сортировка, указывается с помощью ключевого слова WITHIN GROUP.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Кейс. Модели атрибуции

Благодаря модели атрибуции можно обоснованно оценить вклад каждого канала в достижение конверсии. Давайте попробуем посчитать две разных модели атрибуции с помощью оконных функций.

У нас есть таблица с id посетителя (им может быть Client ID, номер телефона и тп.), датами и количеством посещений сайта, а также с информацией о достигнутых конверсиях.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Первый клик

В Google Analytics стандартной моделью атрибуции является последний непрямой клик. И в данном случае 100% ценности конверсии присваивается последнему каналу в цепочке взаимодействий.

Попробуем посчитать модель по первому взаимодействию, когда 100% ценности конверсии присваивается первому каналу в цепочке при помощи функции FIRST_VALUE.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Рядом со столбцом «Medium» появился новый столбец «First_Click», в котором указан канал в первый раз приведший посетителя к нам на сайт и вся ценность зачтена данному каналу.

Произведем агрегацию и получим отчет.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

С учетом давности взаимодействий

В этом случае работает правило: чем ближе к конверсии находится точка взаимодействия, тем более ценной она считается. Попробуем рассчитать эту модель при помощи функции DENSE_RANK.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Рядом со столбцом «Medium» появился новый столбец «Ranks», в котором указан ранг каждой строки в зависимости от близости к дате конверсии.

Теперь используем этот запрос для того, чтобы распределить ценность равную 1 (100%) по всем точкам на пути к конверсии.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Рядом со столбцом «Medium» появился новый столбец «Time_Decay» с распределенной ценностью.

И теперь, если сделать агрегацию, можно увидеть как распределилась ценность по каналам.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Из получившегося отчета видно, что самым весомым каналом является канал «cpc», а канал «cpa», который был бы исключен при применении стандартной модели атрибуции, тоже получил свою долю при распределении ценности.

Источник

Оконные функции в T-SQL – инструкция OVER

В языке Transact-SQL существует очень полезный и мощный инструмент для формирования различных аналитических отчетов – это инструкция OVER, которая работает совместно с так называемыми «оконными функциями», именно об этом мы сегодня с Вами и поговорим.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Инструкция OVER в Transact-SQL

OVER – это инструкция T-SQL, которая определяет окно для применения оконной функции. «Окно» в Microsoft SQL Server – это контекст, в котором работает функция с определённым набором строк, относящихся к текущей строке.

Оконная функция – это функция, которая соответственно работает с окном, т.е. набором строк, и возвращает значение на основе неких вычислений.

Как я уже отметил, оконные функции используют в аналитических отчетах, например, для вычисления каких-то статистических значений (суммы, скользящие средние, промежуточные итоги и так далее) для каждой строки результирующего набора данных.

Честно скажу это очень удобный и полезный функционал Microsoft SQL Server. Впервые поддержка оконных функций появилась в версии Microsoft SQL Server 2005, в которой была реализованы базовая функциональность. В Microsoft SQL Server 2012 функционал оконных функций был расширен, и теперь он с лёгкостью решает много задач, которые до этого решались написанием дополнительного, в некоторых случаях, сложного, непонятного кода (вложенные запросы и т.д.).

Упрощенный синтаксис инструкции OVER

Оконная функция (столбец для вычислений) OVER (

[PARTITION BY столбец для группировки]

[ORDER BY столбец для сортировки]

[ROWS или RANGE выражение для ограничения строк в пределах группы]

В выражении для ограничения строк в группе можно использовать следующие ключевые слова:

Примечание! Чтобы указать выражение для дополнительного ограничения строк (ROWS или RANGE) в окне должна быть указана инструкция ORDER BY.

А сейчас давайте рассмотрим оконные функции, которые существуют в Transact-SQL.

Оконные функции в Transact-SQL

В T-SQL оконные функции можно подразделить на следующие группы:

В одной инструкции SELECT с одним предложением FROM можно использовать несколько оконных функций. Если инструкция PARTITION BY не указана, функция будет обрабатывать все строки результирующего набора. Некоторые функции не поддерживают инструкцию ORDER BY, ROWS или RANGE.

Исходные данные для примеров

Перед тем как перейти к рассмотрению использования оконных функций, давайте сначала создадим тестовые данные, для того чтобы выполнять примеры.

В качестве сервера у меня будет выступать Microsoft SQL Server 2016 Express.

Допустим, у нас будет таблица TestTable, которая содержит список товаров с некоторыми характеристиками.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Агрегатные оконные функции

Агрегатные функции – это функции, которые выполняют на наборе данных вычисления и возвращают итоговое значение. Агрегатные функции, я думаю, всем известны — это, например:

Обычно агрегатные функции используются в сочетании с инструкцией GROUP BY, которая группирует строки, но их также можно использовать и без GROUP BY, например, с использованием инструкции OVER, и в данном случае они будут вычислять значения в определённом окне (наборе данных) для каждой текущей строки. Это очень удобно, если Вам необходимо получить какую-нибудь величину по отношению к общей сумме, например.

Пример использования агрегатных оконных функций с инструкцией OVER.

В этом примере продемонстрировано простое применение некоторых агрегатных оконных функций.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Как видите, у нас вывелись все строки, включая столбцы с агрегированными данными, сгруппированными по категории.

Ранжирующие оконные функции

Ранжирующие функции – это функции, которые ранжируют значение для каждой строки в группе. Например, их можно использовать для того, чтобы пронумеровать строки по группам или выставить ранг и составить рейтинг.

В Microsoft SQL Server существуют следующие ранжирующие функции:

Пример использования ранжирующих оконных функций с инструкцией OVER.

В данном примере мы пронумеруем строки в каждой категории, при этом используем сортировку по столбцу ProductId, а также выставим ранг каждому товару в категории на основе его цены.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Более детально про ранжирующие функции мы говорили в материале – Функции ранжирования и нумерации в Transact-SQL.

Оконные функции смещения

Функции смещения – это функции, которые позволяют перемещаться и, соответственно, обращаться к разным строкам в наборе данных (окне) относительно текущей строки или просто обращаться к значениям в начале или в конце окна. Эти функции появились в Microsoft SQL Server 2012.

К функциям смещения в T-SQL относятся:

Пример использования оконных функций смещения в T-SQL.

В этом примере сначала мы вернем следующее и предыдущее значение идентификатора товара в категории. Затем с помощью FIRST_VALUE и LAST_VALUE получим первое и последнее значение идентификатора товара в категории, при этом в качестве примера я покажу, как используется синтаксис дополнительного ограничения строк. А потом, используя необязательные параметры функций LEAD и LAG, мы сместимся уже на 2 строки относительно текущей, при этом, если после смещения функцией LAG такой строки не окажется, нам вернется 0, так как мы укажем третий необязательный параметр со значением 0.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Аналитические оконные функции

Здесь я перечислю так называемые функции распределения, которые возвращают информацию о распределении данных. Эти функции очень специфичны и в основном используются для статистического анализа, к ним относятся:

У функций PERCENTILE_CONT и PERCENTILE_DISC синтаксис немного отличается, столбец, по которому сортировать данные, указывается с помощью ключевого слова WITHIN GROUP.

Пример использования аналитических оконных функций в T-SQL.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Оконные функции языка T-SQL мы рассмотрели, некоторые из них, как я уже говорил, очень полезны и значительно упрощают написание SQL запросов, всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL, которую написал я, и в которой я подробно, и в то же время простым языком, рассказываю о языке SQL, у меня на этом все, пока!

Заметка! Все возможности языка SQL и T-SQL очень подробно рассматриваются в моих видеокурсах по T-SQL, с помощью которых Вы «с нуля» научитесь работать с SQL и программировать на T-SQL в Microsoft SQL Server.

Источник

Функции окон (SQLы блоков

Функции, которые работают с группой строк, называемой окном, и вычисляют возвращаемое значение для каждой строки на основе группы строк. Функции окон полезны для обработки задач, таких как вычисление скользящего среднего, Вычисление совокупной статистики или доступ к значениям строк по относительному положению текущей строки.

Синтаксис

Параметры

function

Функция, работающая в окне. Различные классы функций поддерживают различные конфигурации спецификаций окна.

Если указано, window_spec должен включать предложение ORDER BY, но не предложение window_frame.

Если указано, функция не должна включать предложение фильтра.

window_spec

Это предложение определяет, как будут группироваться строки, отсортированы внутри группы и какие строки в секции, в которой работает функция.

Одно или несколько выражений, используемых для указания группы строк, определяющей область, в которой работает функция. Если предложение PARTITION не указано, Секция состоит из всех строк.

Предложение ORDER BY задает порядок строк в секции.

Предложение Frame Window указывает скользящее подмножество строк в секции, в которой работает функция Aggregate или Analytics.

В качестве псевдонима для ORDER BY можно указать SORT.

Можно также указать параметр распределить в виде псевдонима для раздела. CLUSTER можно использовать в качестве псевдонима для PARTITION BY при отсутствии предложения ORDER BY.

Источник

Оконные функции SQL

Оконные функции SQL это, пожалуй, самая мистическая часть SQL для многих веб-разработчиков. Нередко встретишь и тех, кто и вовсе никогда о них не слышал. Да что греха таить, я сам продолжительное время не знал об их существовании, решая задачи далеко не самым оптимальным способом.

Привычные нам агрегатные функции также могут быть использованы в качестве оконных функций, нужно лишь добавить выражение определения «окна». Область применения оконных функций чаще всего связана с аналитическими запросами, анализом данных.

Из чего состоит оконная функция

Лучше всего понять как работают оконные функции на практике. Представим, что у нас есть таблица с зарплатами сотрудников по департаментам. Вот как она выглядит:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Результат выполнения запроса:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Чтобы узнать кто эти «счастливчики» на сокращение можно выделить запрос в подзапрос и объединить с исходной таблицей путём JOIN:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Окно задаётся через выражение OVER (PARTITION BY ), т.е. строки мы как бы группируем по признаку в указанных колонках, конкретно в этом случае по признаку принадлежности к департаменту в компании. Результат запроса:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Чтобы отфильтровать потенциальных кандидатов на сокращение можно выделить запрос в подзапрос:

Результат будет точно таким же как и при объединении. Итак, с чувством собственного величия, ощущая себя цифровым палачом вы отправляете результат своему начальнику. Он смотрит на вывод и говорит, что у Аркадия из IT отдела зарплата 300 000, но другой сотрудник в этом же отделе может получать 295 000, разница между ними будет несущественна. Покажи мне пропорцию зарплат в отделе относительно суммы всех зарплат в этом отделе, а также относительно всего фонда оплаты труда!

Как решать? Можно пойти тем же путём, используя подзапросы:

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

На этой таблице видно, что зарплата Нины это 71% расходов на HR отдел, но лишь 10.5% от всего ФОТ, а вот Аркадий выделился, конечно. Его зарплата это 41% от зарплаты всего IT отдела и 21% от всего ФОТ! Идеальный кандидат на сокращение 😈 Но не кажется ли вам, что SQL запрос малость сложный? Давайте попробуем его написать через оконные функции:

Что дальше

В примере выше мы использовали исключительно агрегатные функции как оконные, но в стандарте SQL есть исключительно оконные функции, которые невозможно использовать как агрегатные, это значит, что их невозможно применить при обычной группировке. Вот лишь часть оконных функций, доступных в PostgreSQL:

Со всеми доступными оконными функциями можно ознакомиться в официальной документации PostgreSQL.

Использование оконных функций

last_value делает то же самое только наоборот, возвращает самую последнюю строчку. Давайте найдём с помощью неё самого низкооплачиваемого сотрудника в департаменте.

Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Как исправить ситуацию? Расширить границы окна. Перепишем наш запрос, указав в качестве границ все предшествующие строки в окне и все последующие. В терминах SQL это выражение ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING :

Визуально это выглядит примерно как на картинке ниже.

 Оконные функции sql что это. Смотреть фото Оконные функции sql что это. Смотреть картинку Оконные функции sql что это. Картинка про Оконные функции sql что это. Фото Оконные функции sql что это

Границы можно определять рядом выражений:

💌 Присоединяйтесь к рассылке

Понравился контент? Пожалуйста, подпишись на рассылку.

Источник

Оконные функции – то, что должен знать каждый T-SQL программист. Часть 1.

Еще в Microsoft SQL Server 2005 появился интересный функционал – оконные функции. Это функции, которые позволяют осуществлять вычисления в заданном диапазоне строк внутри предложения Select. Для тех, кто не сталкивался с этими функциями возникает вопрос – «Что значит оконные?». Окно – значит набор строк, в рамках которого происходит вычисление. Оконная функция позволяет разбивать весь набор данных на такие окна.

Конечно, все что могут оконные функции возможно реализовать и без них. Однако оконные функции обладают большим преимуществом перед регулярными агрегатными функциями: нет нужды группировать набор данных для расчетов., что позволяет сохранить все строки набора с их уникальными идентификаторами. При этом результаты работы оконных функций просто добавляются к результирующей выборке как еще одно поле.

Основное преимущество использования оконных функций над регулярными агрегатными функциями заключается в следующем: оконные функции не приводят к группированию строк в одну строку вывода, строки сохраняют свои отдельные идентификаторы, а агрегированное значение добавляется к каждой строке.

Окно определяется с помощью инструкции OVER(). Давайте рассмотрим синтаксис этой инструкции:

Оконная функция (столбец для вычислений) OVER ([PARTITION BY столбец для группировки] [ORDER BY столбец для сортировки] [ROWS или RANGE выражение для ограничения строк в пределах группы])

Ассортимент функций мы рассмотрим во второй части статьи. Скажу лишь, что они разделяются на: агрегирующие, ранжирующие, смещения.

Для демонстрации работы оконных функций предлагаю на тестовой таблице:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *