Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fondovi-lekcii.doc
Скачиваний:
20
Добавлен:
10.11.2018
Размер:
4.09 Mб
Скачать

2.2. Правила опрацювання значення null агрегатними функціями:

  1. Якщо будь-які значення, які містяться у стовпчику дорівнюють NULL, то при обчисленні агрегатних функцій вони ігноруються.

  2. Якщо всі значення у стовпчику дорівнюють NULL, то функції SUM, AVG, MIN, MAX повернуть значення NULL, а функція COUNT поверне значення нуль.

  3. Якщо стовпчик не містить значень (порожній стовпчик чи порожня таблиця), то функції SUM, AVG, MIN, MAX повернуть значення NULL, а функція COUNT поверне значення нуль.

  4. Функція COUNT (*) підраховує кількість рядків і не залежить від наявності чи відсутності у будь-якому стовпчику значення NULL. Якщо рядків у таблиці немає, то функція COUNT поверне значення нуль.

Промислові СУБД можуть по-іншому опрацьовувати значення NULL агрегатними функціями, тобто інакше порівняно із стандартом SQL.

Приклад 7.

SELECT COUNT ()

FROM Vidpusk V, Tovary T

WHERE V. Tovar = T. Nazva

SELECT SUM (V. Kilkist * T. Cina)

FROM Vidpusk V, Tovary T

WHERE V. Tovar = T. Nazva

SELECT AVG (V. Kilkist * T. Cina)

FROM Vidpusk V, Tovary T

WHERE V. Tovar = T. Nazva

SELECT MAX (V. Kilkist * T. Cina)

FROM Vidpusk V, Tovary T

WHERE V. Tovar = T. Nazva

SELECT MIN (V. Kilkist * T. Cina)

FROM Vidpusk V, Tovary T

WHERE V. Tovar = T. Nazva

- в усіх випадках результуюча таблиця містить один стовпчик і один рядок. Агрегатні функції також називають – статистичними.

2.3.Опрацювання унікальних записів агрегатними функціями

Для агрегатних функцій: якщо із групи однакових записів потрібно враховувати лише одну, то перед виразом в дужках записують ключове слово DISTINCT :

Приклад 8:

Tovary

Nazva

Odynyci

Cina

цукор

кг.

2.60

молоко

л.

1.00

хліб

бух.

1.30

дріжджі

кг.

3.60

ковбаса

кг.

17.50

Приклад 9: Вибрати і вивести кількість різних видів одиниць вимірювання наявних на складі товарів.

SELECT COUNT (DISTINCT Odynyci)

FROM Tovary

16)

COLUMN 1

3

2.4. Агрегатні функції і значення null

NULL – відповідає невідомому або не визначеному значенню. В стандарті SQL сказано : “Значення NULL агрегатними функціями ігноруються.”

Нехай:

Персонал (Personal)

Tab. №

Prizv

Plan

Prodano

101

Дід

350

367

102

Баба

300

392

103

Внучка

75

104

Жучка

300

186

105

Кішка

275

286

106

Мишка

350

361

Приклад 10:

SELECT COUNT (*),COUNT (Plan),COUNT (Prodano)

FROM Personal

COUNT (*)

COUNT (Plan)

COUNT (Prodano)

6

5

6

COUNT (*) – обчислює загальну кількість рядків у таблиці.

COUNT( ) – обчислює кількість значень у відповідному стовпчику, які не дорівнюють NULL.

Ігнорування значень NULL – не впливає на результати функцій MIN( ) та MAX( ). Але це ігнорування може привести до проблем при використанні функцій SUM( ) і AVG(), наприклад:

Приклад 11:

SELECT SUМ (Prodano), SUМ (Plan),(SUМ (Prodano) – SUM(Plan)),

SUМ (Prodano - Plan)

FROM Personal

SUМ (Prodano)

SUМ (Plan)

(SUМ (Prodano) – SUM(Plan))

SUM (Prodano Plan)

1667

1575

92

17

Можна було сподіватися, що вирази (SUМ (Prodano) – SUM(Plan)) та SUМ (Prodano - Plan) дадуть ті самі результати, але це не так. Причиною різних результатів є рядок із значенням NULL в стовпчику Plan.

Вираз SUM (Prodano) – обчислює суму продаж для всіх шести працівників, а вираз SUМ (Plan) – обчислює суму тільки п’ять значень і не враховує значення NULL.

Наступний вираз обчислює різницю між цими двома сумами: SUМ (Prodano) – SUM (Plan)

З іншої сторони, вираз SUМ (Prodano - Plan) приймає в якості аргументів лише п’ять значень, які не дорівнюють NULL. В рядку, де значення запланованого об’єму продаж дорівнює NULL (для Внучки), будь-який вираз, що містить поле Plan, отримає значення NULL (а отже, Prodano – Plan  NULL), і це значення функції SUМ( ) проігнорує. Отже, результати цього вирази не враховують фактичні продажі працівника, для якого ще не встановлено плану, хоча вони ввійшли в результат попереднього виразу. Яка ж відповідь є “вірною”? Обидві! Перший вираз обчислює саме те, що і означає, тобто “сума по Prodano мінус сума по Plan” і другий вираз також обчислює саме те, що означає, тобто “сума по різницях між Prodano і Plan”, але при наявності значень NULL результати виразів – відрізняються.

Ось точні правила опрацювання значень, NULL статистичними функціями:

  1. якщо якісь значення, що містяться в стовпчику, дорівнюють NULL, то при обчисленні результату функції вони ігнорують ( не враховуються);

  2. якщо всі значення в стовпчику дорівнює NULL, то функції SUМ ( ), AVG ( ), MIN ( ), MAX ( ) повертають значення NULL; функція COUNT ( ) повертає ;

  3. якщо стовпчик не містить значень (порожній стовпчик  порожня таблиця), то

COUNT ( )  

  1. функція COUNT (*) підраховує кількість рядків і не залежить від наявності чи відсутності в якомусь стовпчику значень NULL; якщо рядків в таблиці – немає, то

COUNT (*)  .

Комерційні (промислові) СУБД можуть по-іншому опрацьовувати NULL – значення статистичними функціями, ніж це описано в стандарті SQL - треба дивитися опис конкретної СУБД.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]