Для определения среднего значения поля marк (оценки)по всем записям таблицы exam marks можно использовать запрос с функцией AVGследующего вида:
SELECT AVG(MARK)
FROM EXAM_MARKS;
Для подсчета общего количества строк в таблице следует использовать функцию countсо звездочкой:
SELECT COUNT(*)
FROM EXAM_MARKS;
Предложение group by(группировать по) позволяет группировать записи в подмножества, определяемые значениями какого-либо поля, и применять агрегирующие функции уже не ко всем записям таблицы, а раздельно к каждой сформированной группе.
Предположим, требуется найти максимальное значение оценки, полученной каждым студентом. Запрос будет выглядеть следующим образом:
SELECTSTUDENT_ID, MAX(MARK)
FROMEXAM_MARKS
GROUP BYSTUDENT_ID;
Выбираемые из таблицы exam_marks записи группируются по значениям поля student_id, указанного в предложении GROUP BY, и для каждой группы находится максимальное значение поля MARK. Предложение group by позволяет применять агрегирующие функции к каждой группе, определяемой общим значением поля (или полей), указанных в этом предложении
В конструкцииGROUP BY для группирования может быть использовано более одного столбца.
SELECTSTUDENT_ID, SUBJ_ID, MAX(MARK)
FROMEXAM_MARKS
GROUP BYSTUDENT_ID, SUBJ_ID;
В этом случае строки вначале группируются по значениям первого столбца, а внутри этих групп – в подгруппы по значениям второго столбца.
В предложении GROUP BY должны быть указаны все выбираемые столбцы, приведенные после ключевого слова SELECT, кроме столбцов, указанных в качестве аргумента в агрегирующей функции.
При необходимости часть сформированных с помощью group by групп может быть исключена с помощью предложения HAVING.
Предложение HAVINGопределяет критерий, по которому группы следует включать в выходные данные.
SELECTSUBJ_NAME, MAX(HOUR)
FROMSUBJECT
GROUP BYSUBJ_NAME
HAVING MAX(HOUR) >= 72;
Упорядочение выходных полей (ORDER BY)
Записи в таблицах реляционной базы данных не упорядочены. Однако данные выводимые в результате выполнения запроса, могут быть упорядочены. Для этого используется оператор ORDER BY. При этом можно задать возрастающую (ASC) или убывающую (DESC) последовательность сортировки для каждого из столбцов. По умолчанию принята возрастающая последовательность сортировки.
Запрос, позволяющий выбрать все данные из таблицы предметов обучения SUBJECT с упорядочением по наименованию предметов выглядит следующим образом: