Як бачимо, одне із значень поля 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 |
Єдине значення, що повертається |
Декілька значень, що повертаються |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.