Заметки

Что такое оконные функции(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.

 

 

Афоризм дня:
Надежды – сны бодрствующих. (510)

Leave a reply