- •1. Dмl: команди вибірки даних
- •2. Вибірка без використання фрази where
- •2.1. Проста вибірка
- •2.2. Виключення дублікатів
- •3. Вибірка з використанням фрази where
- •3.1. Використання операторів порівняння
- •3.2. Використання between
- •3.3. Використання in
- •3.4. Використання like
- •3.5. Залучення невизначеного значення (null-значення)
- •4. Вибірка з упорядкуванням
- •5. Запити з обчисленням. Обчислення у межах Select
- •6. Агрегування даних. Використання агрегатних функцій у запитах
- •6.1. Агрегатні sql-функції
- •6.2. Функції без використання фрази group by
- •6.3. Використання агрегатних функцій з угрупованнями. Фраза group by
- •6.4. Використання фрази having
- •7. Dмl: Запити з використанням кількох таблиць
- •7.1. Засоби одночасної роботи з множиною таблиць
- •7.2. Запити, що використовують з'єднання
6. Агрегування даних. Використання агрегатних функцій у запитах
6.1. Агрегатні sql-функції
У SQL існує ряд спеціальних стандартних функцій (SQL-функцій). Крім спеціального випадку COUNT(*) кожна з цих функцій оперує сукупністю значень стовпця деякої таблиці і створює єдине значення, обумовлене так:
COUNT - число значень у стовпці,
SUM - сума значень у стовпці,
AVG - середнє значення в стовпці,
MAX - найбільше значення в стовпці,
MIN - найменше значення в стовпці.
Для функцій SUM і AVG розглянутий стовпець повинен містити числові значення.
Слід зазначити, що тут стовпець - це стовпець віртуальної таблиці, у якій можуть міститися дані не тільки зі стовпця базової таблиці, але і дані, отримані шляхом функціонального перетворення і (чи) зв'язування символами арифметичних операцій значень з одного чи кількох стовпців. При цьому вираз, що визначає стовпець такої таблиці, може бути як завгодно складним, але не повинно містити SQL-функцій (вкладеність SQL-функцій не допускається). Однак з SQL-функцій можна складати будь-які вирази.
Аргументу усіх функцій, крім COUNT(*), може передувати ключове слово DISTINCT (різний), що вказує, що надлишкові дублюючі значення повинні бути виключені перед тим, як буде застосовуватися функція. Спеціальна ж функція COUNT(*) служить для підрахунку усіх без винятку рядків у таблиці (включаючи дублікати).
6.2. Функції без використання фрази group by
Якщо не використовується фраза GROUP BY, то в перелік елементів_SELECT можна включати лише SQL-функції чи вирази, що містять такі функції. Іншими словами, не можна мати в списку стовпці, що не є аргументами SQL-функцій.
Приклад. Видати дані про масу цибулі (ПР=10, де ПР – номер продукту, 10 відповідає цибулі), проданого постачальниками, і вказати кількість цих постачальників:
SELECT SUM(Кількість),COUNT(Кількість) FROM Поставки WHERE ПР = 10; |
Результат: |
|
SUM(Кількість) |
COUNT(Кількість) |
|
220 |
2 |
|
Якби для виведення в результат ще і номера продукту був сформований запит
SELECT ПР,SUM(Кількість),COUNT(Кількість) FROM Постачання WHERE ПР = 10;
то було б отримане повідомлення про помилку. Це зв'язано з тим, що SQL-функція створює єдине значення з безлічі значень стовпця-аргументу, а для "вільного" стовпця повинне бути видана вся безліч його значень. Без спеціальної вказівки (воно задається фразою GROUP BY) SQL не буде з'ясовувати, однакові значення цієї безлічі (як у даному прикладі, де ПР=10) чи різні (як було б при відсутності WHERE фрази). Тому подібний запит відкидається системою.
У стовпці-аргументі перед застосуванням будь-якої функції, крім COUNT(*), виключаються всі невизначені значення. Якщо виявляється, що аргумент - порожня множина, функція COUNT приймає значення 0, а інші - NULL.
Приклад. Одержати загальну, максимальну, мінімальну і середню кількості деталей, що поставляються, (ключові слова SUM, MAX, MIN, AVG):
SELECT
SUM(PD.VOLUME) AS SM,
MAX(PD.VOLUME) AS MX,
MIN(PD.VOLUME) AS MN,
AVG(PD.VOLUME) AS AV
FROM PD;
В результаті одержимо наступну таблицю з одним рядком:
SM |
MX |
MN |
AV |
2000 |
1000 |
100 |
333.33333333 |
