Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД SQL(засоби ман_пулювання даними.Трив_альн_ запити).docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
62.24 Кб
Скачать

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.

Приклад. Одержати загальну, максимальну, мінімальну і середню кількості деталей, що поставляються, (ключові слова SUMMAXMINAVG):

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