
Заметки
Что такое оконные функции(Window functions)
Оконные функции в БД используются для выполнения вычислений по набору строк, связанных с текущей строкой. Например, вы можете использовать оконную функцию для вычисления скользящего среднего, как в следующем примере.
Прежде всего, давайте создадим и заполним таблицу. Для этого нам понадобится команда CREATE TABLE
и INSERT INTO
.
CREATE TABLE sales (
id INT AUTO_INCREMENT PRIMARY KEY,
sales_date DATE NOT NULL,
total_sales DECIMAL(10, 2) NOT NULL
);
INSERT INTO sales (sales_date, total_sales) VALUES
('2023-01-01', 100.00),
('2023-01-02', 120.00),
('2023-01-03', 150.00),
('2023-01-04', 160.00),
('2023-01-05', 140.00),
('2023-01-06', 110.00),
('2023-01-07', 130.00);
Здесь мы создали таблицу sales
, которая включает в себя id
(автоинкрементный первичный ключ), sales_date
(дату продажи) и total_sales
(общий объем продаж). Затем мы заполнили таблицу данными о продажах за первую неделю 2023 года.
Теперь мы можем использовать оконную функцию для вычисления скользящего среднего продаж за последние три дня. Для этого мы используем функцию AVG()
вместе с конструкцией OVER()
:
SELECT
sales_date,
total_sales,
AVG(total_sales) OVER (
ORDER BY sales_date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
) AS moving_average
FROM sales;
В этом запросе AVG(total_sales) OVER (ORDER BY sales_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
вычисляет скользящее среднее продаж за последние три дня (текущий день и два предыдущих дня). Результаты будут представлены для каждой строки, показывая продажи и скользящее среднее для каждой даты продажи.
Исходя из предоставленных данных, запрос вернёт следующий результат:
sales_date | total_sales | moving_average |
---|---|---|
2023-01-01 | 100.0 | 100.0 |
2023-01-02 | 120.0 | 110.0 |
2023-01-03 | 150.0 | 123.33 |
2023-01-04 | 160.0 | 143.33 |
2023-01-05 | 140.0 | 150.0 |
2023-01-06 | 110.0 | 136.67 |
2023-01-07 | 130.0 | 126.67 |
Как видно из таблицы, столбец moving_average
представляет собой скользящее среднее общих продаж за последние три дня, включая текущий день. Например, значение 123.33 для 2023-01-03 рассчитывается как среднее между 100.0 (для 2023-01-01), 120.0 (для 2023-01-02) и 150.0 (для 2023-01-03).
Пожалуйста, обратите внимание, что поддержка оконных функций была добавлена в MySQL начиная с версии 8.0.
Leave a reply