дадуть ті самі результати, але це не так. Причиною різних результатів є рядок із значенням 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 ( ) ® Æ
4. функція COUNT (*) підраховує кількість рядків і не залежить від наявності чи відсутності в якомусь стовпчику значень NULL; якщо рядків в таблиці – немає, то
COUNT (*) ® Æ.
Комерційні (промислові) СУБД можуть по-іншому опрацьовувати NULL – значення статистичними функціями, ніж це описано в стандарті SQL - треба дивитися опис конкретної СУБД.