Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Типи Віконних Функцій | Деякі Додаткові Теми
Просунуті Техніки в SQL

bookТипи Віконних Функцій

Давайте коротко розглянемо основні типи віконних функцій, які використовуються в SQL.

Агрегатні функції

Це стандартні агрегатні функції (AVG, SUM, MAX, MIN, COUNT), які застосовуються у віконному контексті. Ми вже використовували цей тип віконних функцій у попередньому розділі.

Функції ранжування

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

  • RANK(): Призначає унікальний ранг кожному унікальному рядку в межах розділу на основі оператора ORDER BY. Рядки з однаковими значеннями отримують однаковий ранг, при цьому у ранжуванні залишаються пропуски;

  • DENSE_RANK(): Подібна до RANK(), але без пропусків у послідовності рангів;

  • NTILE(n): Ділить рядки у впорядкованому розділі на n груп і призначає кожному рядку номер групи.

Приклад

Виконаємо ранжування продажів за Amount для кожного ProductID у порядку зростання, використовуючи функцію DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

Результуюча таблиця містить усю інформацію з основної таблиці та додатковий стовпець, який відображає ранг кожного продажу для конкретного продукту.

Функції порівняння значень

Віконні функції порівняння значень у SQL використовуються для порівняння значень у поточному рядку зі значеннями в інших рядках у межах тієї ж самої секції (partition).
Ці функції особливо корисні для аналізу тенденцій, виконання обчислень на основі сусідніх рядків або доступу до певних значень рядків у визначеному вікні. У SQL існує декілька функцій порівняння значень:

  • LAG(): Повертає значення з попереднього рядка у вибірці без необхідності використання self-join;
  • LEAD(): Повертає значення з наступного рядка у вибірці без необхідності використання self-join;
  • FIRST_VALUE(): Повертає значення першого рядка у віконній рамці;
  • LAST_VALUE(): Повертає значення останнього рядка у віконній рамці.

Приклад

Використаємо віконну функцію порівняння значень LAG(), щоб обчислити зміну суми продажу порівняно з попереднім продажем для кожного продукту:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

У результаті ми можемо легко отримати інформацію про різницю в продажах для кожного окремого продукту без використання підзапитів або збережених процедур.
Також можна обчислити різницю для всіх продажів без розбиття на секції, використовуючи наступний запит:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Ви можете побачити, що ми не включили оператор PARTITION BY у блок OVER. Це означає, що ми не хочемо отримувати попередні значення лише для певного продукту, а для всіх продажів у таблиці.

question mark

Що робить функція 'NTILE()' у SQL?

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Suggested prompts:

Can you explain the difference between RANK() and DENSE_RANK() in more detail?

What are some practical use cases for value comparison window functions like LAG() and LEAD()?

Could you provide more examples of window functions in SQL?

Awesome!

Completion rate improved to 4.35

bookТипи Віконних Функцій

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

Давайте коротко розглянемо основні типи віконних функцій, які використовуються в SQL.

Агрегатні функції

Це стандартні агрегатні функції (AVG, SUM, MAX, MIN, COUNT), які застосовуються у віконному контексті. Ми вже використовували цей тип віконних функцій у попередньому розділі.

Функції ранжування

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

  • RANK(): Призначає унікальний ранг кожному унікальному рядку в межах розділу на основі оператора ORDER BY. Рядки з однаковими значеннями отримують однаковий ранг, при цьому у ранжуванні залишаються пропуски;

  • DENSE_RANK(): Подібна до RANK(), але без пропусків у послідовності рангів;

  • NTILE(n): Ділить рядки у впорядкованому розділі на n груп і призначає кожному рядку номер групи.

Приклад

Виконаємо ранжування продажів за Amount для кожного ProductID у порядку зростання, використовуючи функцію DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

Результуюча таблиця містить усю інформацію з основної таблиці та додатковий стовпець, який відображає ранг кожного продажу для конкретного продукту.

Функції порівняння значень

Віконні функції порівняння значень у SQL використовуються для порівняння значень у поточному рядку зі значеннями в інших рядках у межах тієї ж самої секції (partition).
Ці функції особливо корисні для аналізу тенденцій, виконання обчислень на основі сусідніх рядків або доступу до певних значень рядків у визначеному вікні. У SQL існує декілька функцій порівняння значень:

  • LAG(): Повертає значення з попереднього рядка у вибірці без необхідності використання self-join;
  • LEAD(): Повертає значення з наступного рядка у вибірці без необхідності використання self-join;
  • FIRST_VALUE(): Повертає значення першого рядка у віконній рамці;
  • LAST_VALUE(): Повертає значення останнього рядка у віконній рамці.

Приклад

Використаємо віконну функцію порівняння значень LAG(), щоб обчислити зміну суми продажу порівняно з попереднім продажем для кожного продукту:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

У результаті ми можемо легко отримати інформацію про різницю в продажах для кожного окремого продукту без використання підзапитів або збережених процедур.
Також можна обчислити різницю для всіх продажів без розбиття на секції, використовуючи наступний запит:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Ви можете побачити, що ми не включили оператор PARTITION BY у блок OVER. Це означає, що ми не хочемо отримувати попередні значення лише для певного продукту, а для всіх продажів у таблиці.

question mark

Що робить функція 'NTILE()' у SQL?

Select the correct answer

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

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

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

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