Здавалка
Главная | Обратная связь

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



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

COUNT - число значень у стовпці,

SUM - сума значень у стовпці,

AVG - середнє значення в стовпці,

MAX - найбільше значення в стовпці,

MIN - найменше значення в стовпці.

Для функцій SUM і AVG розглянутий стовпець повинен містити числові значення.

Слід зазначити, що тут стовпець - це стовпець віртуальної таблиці, у якій можуть міститися дані не тільки зі стовпця базової таблиці, але і дані, отримані шляхом функціонального перетворення і (чи) зв'язування символами арифметичних операцій значень з одного чи кількох стовпців. При цьому вираз, що визначає стовпець такої таблиці, може бути як завгодно складним, але не повинно містити SQL-функцій (вкладеність SQL-функцій не допускається). Однак з SQL-функцій можна складати будь-які вирази.

Аргументу усіх функцій, крім COUNT(*), може передувати ключове слово DISTINCT (різний), що вказує, що надлишкові дублюючі значення повинні бути виключені перед тим, як буде застосовуватися функція. Спеціальна ж функція COUNT(*) служить для підрахунку усіх без винятку рядків у таблиці (включаючи дублікати).

Функції без використання фрази GROUP BY

Якщо не використовується фраза GROUP BY, то в перелік елементів_SELECT можна включати лише SQL-функції чи вирази, що містять такі функції. Іншими словами, не можна мати в списку стовпці, що не є аргументами SQL-функцій.

Приклад. Видати дані про масу цибулі (ПР=10, де ПР – номер продукту, 10 відповідає цибулі), проданого постачальниками, і вказати кількість цих постачальників:

 

SELECT SUM(Кількість),COUNT(Кількість) FROM Поставки WHERE ПР = 10; Результат:
SUM(Кількість) COUNT(Кількість)

Якби для виведення в результат ще і номера продукту був сформований запит

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
333.33333333






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.