Агрегатні 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(Кількість) то було б отримане повідомлення про помилку. Це зв'язано з тим, що 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; В результаті одержимо наступну таблицю з одним рядком:
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|