PostgreSql. Оконные функции.

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

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

Таким образом, если запрос использует какие-либо агрегаты, GROUP BY или HAVING, то строки, которые будут предоставлены оконным функциям будут уже сгруппированными, а не первоначальными строками таблиц, которые указаны в предложениях FROM/WHERE.

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

Все эти проблемы, решаются с помощью оконных функций. Давайте на примере, создадим и наполним данными таблицу "Сотрудники":

Нам необходимо вытащить из таблицы "Сотрудники", следующие данные:

  • Название отдела,
  • Номер сотрудника,
  • Средняя зарплата по отделу сотрудника,
  • Общая сумма зарплат отдела,
  • Количество сотрудников, в котором работает сотрудник

Так будет выглядеть запрос, без использования оконных функций:

Время выполнения ~ 4ms.

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

Время выполнения ~ 2ms.

Таким образом, на самом простом запросе, выигрыш по времени составил более чем, в 2 раза. Ну и код намного более читабельным стал.

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

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

© Krenar 2020. All right reserved.