Агрегатні функції та групування даних Доцент кафедри пст поляков С. А
Скачать 319.26 Kb.
|
SQL Агрегатні функції та групування даних Доцент кафедри ПСТ Поляков С.А. 2019 Агрегатні функції Скалярні функції отримують в якості параметрів скалярні значення і повертають скалярні значення Агрегатні функції отримують в якості параметрів сукупність (колекція) скалярних значень і повертають скалярні значення Аналогом в мовах програмування є функції, які отримують в якості параметрів масиви і повертають суму елементів, максимальне, або мінімальне значення. Приклад 4-01 Основні агрегатні функціх Агрегатна функція Результат виконання AVG([ALL|DISTINCT] expression) Середнє значення всіх елементів, які не є NULL SUM([ALL|DISTINCT] expression) Сума всіх елементів, які не є NULL MIN([ALL|DISTINCT] expression) Мінімальне значення серед елементів, які не є NULL MAX([ALL|DISTINCT] expression) Максимальне значення серед всіх елементів, які не є NULL COUNT([ALL|DISTINCT] expression) Кількість всіх елементів, які не є NULL COUNT(*) кількість рядків Властивості агрегатних функцій - Для AVG та SUM вираз, який знаходиться в функції повинен повертати числове значення - Для MIN, MAX та COUNT можуть виконуватися на числах, датах або рядках - По умовчанню функції обчислюються на всіх значеннях, включаючи дублікати. (NULL не враховуються). Для виключення дублікатів треба використовувати ключове слово DISTINCT - Всі агрегатні функції, за винятком COUNT(*) ігнорують NULL - Не можна змішувати агрегатні та не агрегатні функції в одній фразі SELEC, за винятком запитів на групування Значення агрегатних функцій на пустих даних Агрегатна функція Результат виконання на пустих даних AVG([ALL|DISTINCT] expression) NULL SUM([ALL|DISTINCT] expression) NULL MIN([ALL|DISTINCT] expression) NULL MAX([ALL|DISTINCT] expression) NULL COUNT([ALL|DISTINCT] expression) 0 COUNT(*) 0 Приклади агрегатних функцій 4-02-1: Обчислити кількість інвойсів створених після 1 січня 2014 року, середнє значення, та суму всіх інвойсів Що роблять запити 04-02-2, 04-02-3, 04-02-4 ? Групування даних SELECT select_list FROM table_source [WHERE search condition] GROUP BY group_by_list [ORDER BY order_by_list] Приклад 04-03 Приклади групування Приклад 04-04-1 Приклад 04-04-2 Фільтрація груп SELECT select_list FROM table_source [WHERE search condition] [GROUP BY group_by_list] HAVING search_condition [ORDER BY order_by_list] Приклади 04-04-3, 04-04-4 Властивості групування - GROUP BY групує рядки, вказуючи назви колонок, або скалярні вирази на колонках - Агрегатні функції розраховуються окремо для кожної групи - Якщо фраза GROUP BY містить дві, або більше умови групування, то спочатку виконується групування по першій умові, потім на кожній групі виконується групування по другій умові і т.д. - NULL утворює окрему групу - За умовчанням GROUP BY впорядковує колонки за зростанням значень групування. Для того, щоб уникнути сортування треба додати ORDER BY NULL. Це може прискорити запит - Чим відрізняється HAVING від WHERE - WHERE виконується на рядках таблиці - HAVING виконується на групах - Спочатку виконується WHERE, потім рядки групуються, потім виконується HAVING - WHERE може посилатися на будь яку колонку, HAVING може посилатися тільки на колонки які є в фразі SELECT - WHERE не може мати агрегатні функції, може використовувати агрегатні функції Див. приклад 04-05 Використання складних умов Приклад 04-06 Оператор ROLLUP SELECT select_list FROM table_source [WHERE search condition] [GROUP BY group_by_list] HAVING search_condition WITH ROLLUP [ORDER BY order_by_list] - Приклад 04-07 Властивості ROLLUP - використовується для розрахунку підсумків - до кожної групи додає підсумки по всім колонкам, по яким виконується групування Наприклад, якщо групуванні виконується по колонкам A, B, C то будуть обчислені підсумки по A, B, тільки по A, та загальний підсумок по всім групам |