Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Универсальность SQL как языка запросов к СУБД с годами возросла. Его обширная полезность и универсальность делают его фаворитом на все времена для каждого аналитика данных.

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

Важность оконных функций

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

Оконные функции полезны, когда вы применяете агрегатные функции к определенному набору данных или набору строк. Эти функции выходят за рамки функций агрегирования, предоставляемых GROUP BY. Однако основное отличие состоит в том, что, в отличие от функции группировки, ваши данные не объединяются в одну строку.

instagram viewer

Вы не можете использовать оконные функции внутри ГДЕ, ОТ, и ГРУППА ПО заявления.

Синтаксис оконной функции

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

Вот синтаксис по умолчанию:

ВЫБИРАТЬ столбец1,
{window_function} (имя_столбца2)
OVER([PARTITION BY columnname1] [ORDER BY columnname3]) AS new_column
ОТ имя_таблицы;

Где:

  • имя_колонны1 — это первое имя столбца, которое вы хотите выбрать.
  • {функция_окна} — это имя агрегатной функции, такой как sum, avg, count, row_number, rank или density_rank.
  • имя_столбца2 — это имя столбца, к которому вы применяете оконную функцию.
  • имя_столбца3 — имя третьего столбца, которое станет основой для раздела.
  • новая_колонка это метка для нового столбца, которую вы можете применить с помощью КАК ключевое слово.
  • имя_таблицы имя исходной таблицы.

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

Подготовка набора данных

Вы можете использовать СОЗДАТЬ ТАБЛИЦУ заявление создать новую таблицу в SQL. Вот пример набора данных, который будет использоваться в этом руководстве для определения некоторых оконных функций:

Дата заказа

Категория

Цвет

Цена продажи

Количество

08-11-2016

Телефоны

Черный

907.152

6

12-06-2016

Связующие

Зеленый

18.504

3

11-10-2015

Техника

Желтый

114.9

5

11-10-2015

Столы

Коричневый

1706.184

9

09-06-2014

Телефоны

Красный

911.424

4

09-06-2014

Бумага

Белый

15.552

3

09-06-2014

Связующие

Черный

407.976

3

09-06-2014

Техника

Желтый

68.81

5

09-06-2014

Связующие

Зеленый

2.544

3

09-06-2014

Хранилище

Апельсин

665.88

6

09-06-2014

Хранилище

Апельсин

55.5

2

15-04-2017

Телефоны

Черный

213.48

3

05-12-2016

Связующие

Зеленый

22.72

4

22-11-2015

Техника

Зеленый

60.34

7

22-11-2015

Стулья

Темно коричневый

71.372

2

13-05-2014

Мебель

Апельсин

190.92

5

Объяснение функции суммы

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

ВЫБИРАТЬкатегория, цвет,
сумма (цена_продажи)
БОЛЕЕ (упорядочить по категориям) AS total_sales
ИЗ сахил.образца;

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

Как использовать оконную функцию Avg()

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

ВЫБИРАТЬкатегория, цвет,
средняя (продажная_цена)
БОЛЕЕ (упорядочить по категориям) AS avg_sales
ИЗ сахил.образца;

Научитесь использовать оконную функцию Count()

Подобно функциям sum и avg, оконная функция count в SQL довольно проста и работает по тому же принципу, что и две другие функции. Когда вы передаете функцию подсчета, вы получаете общее количество каждого значения в новом столбце.

Вот как вы можете рассчитать количество:

ВЫБИРАТЬкатегория, цвет,
количество (категория)
OVER (упорядочить по категориям) AS item_count
ИЗ сахил.образца;

Оконная функция Row_Number()

В отличие от некоторых других оконных функций, перечисленных выше, row_number() работает несколько иначе. Функция row_number() присваивает номер строки каждой строке в зависимости от предложения order by. Начальный номер строки 1; row_number присваивает соответствующее значение каждой строке до конца.

Вот базовая структура функции row_number():

ВЫБИРАТЬкатегория, цвет,
номер_строки()
OVER (упорядочить по категориям) AS item_number
ИЗ сахил.образца;

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

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

ВЫБИРАТЬкатегория, цвет,
номер_строки()
OVER (раздел по категориям, порядок по категориям) AS item_number
ИЗ сахил.образца;

Функции Rank() и Dense_Rank()

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

Вы можете использовать приведенный ниже синтаксис кода для передачи функции ранжирования в SQL:

ВЫБИРАТЬкатегория, цвет,
классифицировать()
OVER (упорядочить по цвету) AS item_rank
ИЗ сахил.образца;

Взгляните на вывод, чтобы понять, как работает эта функция.

Порядок по функции сортирует цветовую категорию, а функция ранга присваивает ранг каждому цвету. Однако все одинаковые значения цвета имеют одинаковый ранг, в то время как разные цвета имеют разные ранги. Черный цвет встречается в наборе данных трижды; вместо присвоения значения ранга 1, 2 и 3 элементы черного цвета получают ранг 1.

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

Функция плотности_ранга не пропускает значения ранга во время упорядочения по функциям. Например, первые три цветных предмета (черный) будут иметь ранг 1. Однако следующий цвет (коричневый) будет иметь ранг не 4, а ранг 2, который является следующим хронологическим номером в списке нумерации. Функция плотности_ранга является более практичной оконной функцией, поскольку она присваивает осмысленное значение списку элементов.

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

ВЫБИРАТЬкатегория, цвет,
плотный_ранг()
OVER (упорядочить по цвету) AS item_rank
ИЗ сахил.образца;

А вот пример того, как будет выглядеть вывод этой функции:

SQL-функции в помощь

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

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