Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Віконні Функції | Деякі Додаткові Теми
Quizzes & Challenges
Quizzes
Challenges
/
Оптимізація SQL та Особливості Запитів

bookВіконні Функції

Віконні функції — це категорія SQL-функцій, які виконують обчислення над набором рядків, пов’язаних з поточним рядком у межах визначеного вікна або розділу.
Вони використовуються для виконання обчислень та аналізу над підмножиною рядків без зменшення результатного набору, на відміну від агрегатних функцій, які зазвичай зменшують кількість рядків, що повертаються запитом.

Пояснення

Припустимо, у нас є наступна таблиця Sales:

12
SELECT * FROM sales
copy

Якщо наша мета — обчислити загальний дохід для кожного окремого продукту та відобразити його в додатковій колонці основної таблиці, а не створювати нову згруповану таблицю, результат може виглядати наступним чином:

Але як це зробити?
Використання GROUP BY не підходить для цього завдання, оскільки ця конструкція зменшує кількість рядків, групуючи їх за вказаними критеріями, у результаті чого повертаються лише ідентифікатори та відповідні їм суми.

Саме тому віконні функції є необхідними для вирішення цієї проблеми.

Реалізація

Потрібний результат можна отримати за допомогою наступного запиту:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
copy

Загальний синтаксис створення віконної функції можна описати наступним чином:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: вказує на початок запиту;
  • aggregation_func(): агрегатна функція (наприклад, SUM, AVG, COUNT), яка виконує обчислення над набором рядків, визначених вікном;
  • OVER: ключове слово, що вводить віконну функцію;
  • PARTITION BY: розділяє результуючу вибірку на розділи за значеннями вказаного стовпця(ів). Віконна функція виконується окремо для кожного розділу;
    • partition_column: стовпець, який використовується для розділення вибірки.
  • ORDER BY: визначає порядок рядків у кожному розділі;
    • order_column: стовпець, який використовується для впорядкування рядків у кожному розділі.
  • FROM: вказує джерело даних, з якого здійснюється вибірка;
    • table_name: назва таблиці, з якої здійснюється вибірка даних.
question mark

Який оператор використовується для визначення розділення у віконній функції?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you explain how the PARTITION BY clause works in window functions?

What other types of window functions are commonly used in SQL?

Can you show an example using ORDER BY within a window function?

bookВіконні Функції

Свайпніть щоб показати меню

Віконні функції — це категорія SQL-функцій, які виконують обчислення над набором рядків, пов’язаних з поточним рядком у межах визначеного вікна або розділу.
Вони використовуються для виконання обчислень та аналізу над підмножиною рядків без зменшення результатного набору, на відміну від агрегатних функцій, які зазвичай зменшують кількість рядків, що повертаються запитом.

Пояснення

Припустимо, у нас є наступна таблиця Sales:

12
SELECT * FROM sales
copy

Якщо наша мета — обчислити загальний дохід для кожного окремого продукту та відобразити його в додатковій колонці основної таблиці, а не створювати нову згруповану таблицю, результат може виглядати наступним чином:

Але як це зробити?
Використання GROUP BY не підходить для цього завдання, оскільки ця конструкція зменшує кількість рядків, групуючи їх за вказаними критеріями, у результаті чого повертаються лише ідентифікатори та відповідні їм суми.

Саме тому віконні функції є необхідними для вирішення цієї проблеми.

Реалізація

Потрібний результат можна отримати за допомогою наступного запиту:

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
copy

Загальний синтаксис створення віконної функції можна описати наступним чином:

SELECT 
    aggregation_func() OVER (
        PARTITION BY partition_column
        ORDER BY order_column
    )
FROM 
    table_name;
  • SELECT: вказує на початок запиту;
  • aggregation_func(): агрегатна функція (наприклад, SUM, AVG, COUNT), яка виконує обчислення над набором рядків, визначених вікном;
  • OVER: ключове слово, що вводить віконну функцію;
  • PARTITION BY: розділяє результуючу вибірку на розділи за значеннями вказаного стовпця(ів). Віконна функція виконується окремо для кожного розділу;
    • partition_column: стовпець, який використовується для розділення вибірки.
  • ORDER BY: визначає порядок рядків у кожному розділі;
    • order_column: стовпець, який використовується для впорядкування рядків у кожному розділі.
  • FROM: вказує джерело даних, з якого здійснюється вибірка;
    • table_name: назва таблиці, з якої здійснюється вибірка даних.
question mark

Який оператор використовується для визначення розділення у віконній функції?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 2
some-alt