PostgreSql. Оконные функции.
Оконные функции в PostgreSQL являются очень мощным инструментом, для создания быстрых и лаконичных запросов.
Оконные функции необходимы для вычисления строк на основе других строк в выборке. Если запрос содержит какие-либо оконные функции, то эти функции выполняются после выполнения всех предложений группировки, агрегирования и HAVING.
Таким образом, если запрос использует какие-либо агрегаты, GROUP BY или HAVING, то строки, которые будут предоставлены оконным функциям будут уже сгруппированными, а не первоначальными строками таблиц, которые указаны в предложениях FROM/WHERE.
Каждая строчка возвращаемая запросом, ничего не знает про другую. Поэтому разработчики, начинают использовать группировки в подзапросах, чтобы получить уже посчитаннае данные, на основании набора строк. Из-за этого запрос становиться слишком "тяжелым" и сопровождать его, остается очень мало удовольствия.
Все эти проблемы, решаются с помощью оконных функций. Давайте на примере, создадим и наполним данными таблицу "Сотрудники":
Нам необходимо вытащить из таблицы "Сотрудники", следующие данные:
- Название отдела,
- Номер сотрудника,
- Средняя зарплата по отделу сотрудника,
- Общая сумма зарплат отдела,
- Количество сотрудников, в котором работает сотрудник
Так будет выглядеть запрос, без использования оконных функций:
Время выполнения ~ 4ms.
А так будет выглядеть запрос, с теми же данными, но уже с использованием оконных функций.
Время выполнения ~ 2ms.
Таким образом, на самом простом запросе, выигрыш по времени составил более чем, в 2 раза. Ну и код намного более читабельным стал.
А здесь вы можете узнать, как можно удалить все дублирующие строки в БД, с помощью оконных функций.
Если вам помогла статья, пожалуйста перейдите по одному из рекламных блоков, расположенных на сайте. Таким образом вы поддержите проект. Спасибо