Мова SQL. Оператори створення та видалення об’єктів баз даних. Оператори пошуку інформації. Агрегатні функції. Вкладені запити, страница 5

Як бачимо,  одне із значень поля NmPs не визначено (має значення Null).

Хай ця таблиця має назву Query2. Застосуємо два способи використання функції Count() і наведемо результати застосування.

SELECT Count(Query2.NmPs) AS [Count-NmPs]

FROM Query2;

Count-NmPs

5

SELECT Count(*) AS [Count-NmPs]

FROM Query2;

Count-NmPs

6

Результати відрізняються, тому що один рядок у віртуальній  таблиці  (запиті) містить нульове значення в стовпчику NmPs. При використанні стовпчика без нульових значень результати роботи функції  CОUNT  і COUNT(*) будуть однакові.

9.4 Групування даних. Опція GROUP BY

GROUP BY – невід’ємно пов’язана з агрегатними функціями, без них вона практично не використовується. GROUP BY поділяє таблицю на набори, а агрегатні функції обраховують для кожного з них підсумкові значення. Це значення називається агрегатним вектором.

Для ілюстрації застосування опції GROUP BY на прикладі таблиць TCHS  і РOST внесемо зміни до таблиці TCHS, оскільки вміст таблиці не відповідає вимогам посилальної цілісності – для викладача „Колчак А.Д.” у підпорядкованій таблиці TCHS поле CdPs має значення „05”, тоді як такого значення немає в батьківській таблиці POST. Це може привести до ускладнення інтерпретації результатів запитів, що будуть продемонстровані нижче. Тому замінимо значення „05” на „03”.

UPDATE TCHS SET TCHS.CdPs = '03'

WHERE (((TCHS.CdTh)=17));

Додамо до таблиці TCHS ще п’ять рядків, щоб зробити майбутні приклади більш виразними.

INSERT INTO TCHS VALUES (18, "Батура О.Й.", "02",6);

INSERT INTO TCHS VALUES (19, "Балагура А.М.", "04",2);

INSERT INTO TCHS VALUES (21, "Махно Н.Є.", "01",7);

INSERT INTO TCHS VALUES (22, "Собчак А.О.", "01",12);

INSERT INTO TCHS VALUES (24, "Черно Ф.М.", "04",2);

Новий вміст таблиці TCHS наведено нижче.

CdTh

NmTh

CdPs

CdCf

3

Середа І.С.

01

6

5

Бандура В.М.

02

6

6

Мунтян Р.Д.

01

7

11

Сірко В.В.

02

7

15

Оприско Ю.Й.

02

2

17

Колчак А.Д.

03

12

18

Батура О.Й.

02

6

19

Балагура А.М.

04

2

21

Махно Н.Є.

01

7

22

Собчак А.О.

01

12

24

Черно Ф.М.

04

2

Тепер продемонструємо різницю при використанні агрегатних функцій без  вживання опції GROUP BY та при вживанні. У скалярному агрегатному запиті визначимо середнє нормативне навантаження усіх викладачів, а у векторному агрегатному запиті визначимо середнє нормативне навантаження викладачів по кафедрах.

Приклади:

 


SELECT Avg(POST.NrNv) AS [Avg-NrNv]

FROM TCHS INNER JOIN POST ON TCHS.CdPs = POST.CdPs;

SELECT TCHS.CdCf, Avg(POST.NrNv) AS [Avg-NrNv]

FROM TCHS INNER JOIN POST ON TCHS.CdPs = POST.CdPs

GROUP BY TCHS.CdCf;

Результати запитів

Avg-NrNv

CdCf

Avg-NrNv

686,36

2

766,67

6

666,67

7

633,33

12

675


Єдине значення, що повертається

Декілька значень, що повертаються