Например, можно вычислить количество студентов, сдававших экзамены по каждой дисциплине. Для этого надо выполнить запрос с группировкой по полю "Дисциплина" и вывести в качестве результата название дисциплины и количество строк в группе по данной дисциплине. Применение символа * в качестве аргумента функции COUNT означает подсчет всех строк в группе.
Результат:
82
Дисциплина | COUNT(*) |
Базы данных | 6 |
Теория информации | 4 |
Сети и телекоммуникации | 3 |
Английский язык | 4 |
Если же мы хотим сосчитать количество сдавших экзамен по какой-либо дисциплине, то нам необходимо исключить неопределенные значения из исходного отношения перед группировкой. В этом случае запрос будет выглядеть следующим образом:
Получим результат:
Дисциплина | COUNT(*) |
Базы данных | 6 |
Теория информации | 3 |
Сети и телекоммуникаций | 3 |
Английский язык | 4 |
В этом случае строка со студентом
Миронов А. В. | Теория информации | Null |
не попадет в набор кортежей перед группировкой, поэтому количество кортежей в группе для дисциплины "Теория информации" будет на 1 меньше.
Можно применять агрегатные функции также и без операции предварительной группировки, в этом случае все отношение рассматривается как одна группа и для этой группы можно вычислить одно значение на группу.
Обратившись снова к базе данных "Сессия" (таблицы R1, R2, R3), найдем количество успешно сданных экзаменов: