Главная страница

Преобразование вывода и встроенные функции. ПРактическая работа №3_SQl. Преобразование вывода и встроенные


Скачать 84.77 Kb.
НазваниеПреобразование вывода и встроенные
АнкорПреобразование вывода и встроенные функции
Дата11.10.2021
Размер84.77 Kb.
Формат файлаdocx
Имя файлаПРактическая работа №3_SQl.docx
ТипДокументы
#245045
страница3 из 3
1   2   3

Агрегирование и групповые функции


Агрегирующие функции позволяют получать из таблицы сводную (агрегированную) информацию, выполняя операции над группой строк таблицы. Для задания в SELECT-запросе агрегирующих операций используются следующие ключевые слова:

      • COUNT определяет количество строк или значений поля, выбранных посредством запроса и не являющихся NULL-значениями;

      • SUM вычисляет арифметическую сумму всех выбранных значений данного поля;

      • AVG вычисляет среднее значение для всех выбранных значений данного поля;

      • МАХ вычисляет наибольшее из всех выбранных значений данного поля;

      • MIN вычисляет наименьшее из всех выбранных значений данного поля.

Выборкаданных(операторSELECT)
В SELECT-запросе агрегирующие функции используются аналогично именам полей, при этом последние (имена полей) используются в качестве аргументов этих функций.

Функция AVG предназначена для подсчета среднего значе- ния поля на множестве записей таблицы.

Например, для определения среднего значения поля MARK (оценки) по всем записям таблицы EXAM_MARKS можно исполь- зовать запрос с функцией AVG следующего вида:

SELKCT AVERAGE (MARK) PROM EXAM_MARKS;

Для подсчета общего количества строк в таблице следует ис-

пользовать функцию COUNT со звездочкой.

SELECT COUNT(*)

FROM EXAM_MARKS;

Аргументы DISTINCT и ALL позволяют, соответственно, исключать и включать дубликаты обрабатываемых функцией COUNT значений, при этом необходимо учитывать, что при ис- пользовании опции ALL значения NULL все равно не войдут в число подсчитываемых значений.

SELECT COUNT(DISTINCT SUBJ_IDj FROM SUBJECT;

Предложение GROUP BYGROUP BY (группировать по) позволяет группировать записи в подмножества, определяемые значениями какого-либо поля, и применять агрегирующие функции уже не ко всем записям таблицы, а раздельно к каждой сформированной группе.

Предположим, требуется найти максимальное значение оценки, полученной каждым студентом. Запрос будет выглядеть следующим образом:

SELECT STUDENT_ID, MAX(MARKj FROM EXAM_MARKS

GROUP BY STUDENT_ID;

Выбираемые из таблицы EXAM_MARKS записи группируются по значениям поля STUDENT__ID, указанного в предложении GROUP BY, и для каждой группы находится максимальное зна

чение поля MARK. Предложение GROUP BY позволяет применять агрегирующие функции к каждой группе, определяемой общим значением поля (или полей), указанных в этом предложении. В приведенном запросе рассматриваются группы записей, сгруппированные по идентификаторам студентов.

В конструкции GROUP BY для группирования может быть использовано более одного столбца. Например,:

SELECT STUDENT_ID, SUBJ_ID, MAX (MARKj FROM EXAM_MARKS

GROUP BY STUDENT_ID, SUBJ_ID;

В этом случае строки вначале группируются по значениям первого столбца, а внутри этих групп — в подгруппы по значе- ниям второго столбца. Таким образом, GROUP BY не только уста- навливает столбцы, по которым осуществляется группирова- ние, но и указывает порядок разбиения столбцов на группы.

Следует иметь в виду, что в предложении GROUP BY должны быть указаны все выбираемые столбцы, приведенные после ключевого слова SELECT, кроме столбцов, указанных в качестве аргумента в агрегирующей функции.

При необходимости часть сформированных с помощью GROUP BY групп может быть исключена с помощью предложения HAVING.

Предложение HAVING определяет критерий, по которому группы следует включать в выходные данные, по аналогии с пред- ложением WHERE, которое осуществляет это для отдельных строк.

SELECT SUBJ_NAME, MAX(HOURj

FROM SUBJECT

GROUP BY SUBJ_NAME HAVING MAX (HOURj >= 72;

В условии, задаваемом предложением HAVING, указывают

только поля или выражения, которые на выходе имеют единственное значение для каждой выводимой группы.
Задания

      1. Напишите запрос для подсчета количества студентов, сдававших экзамен по предмету обучения с идентификатором, равным 20.

      2. Напишите запрос, который позволяет подсчитать в таблице EXAM_MARKS количество различных предметов обучения.

      3. Напишите запрос, который выполняет выборку для каждого студента значения его идентификатора и минимальной из полученных им оценок.

      4. Напишите запрос, осуществляющий выборку для каждого студента значения его идентификатора и максимальной из полученных им оценок.

      5. Напишите запрос, выполняющий вывод фамилии первого в алфавитном порядке (по фамилии) студента, фамилия которого начи нается на букву «И».

      6. Напишите запрос, который выполняет вывод (для каждого предмета обучения) наименования предмета и максимального значения номера семестра, в котором этот предмет преподается.

      7. Напишите запрос, который выполняет вывод данных для каждого конкретного дня сдачи экзамена о количестве студентов, сдававших экзамен в этот день.

      8. Напишите запрос для получения среднего балла для каждого курса по каждому предмету.

      9. Напишите запрос для получения среднего балла для каждого студента.

      10. Напишите запрос для получения среднего балла для каждого экзамена.

      11. Напишите запрос для определения количества студентов, сдававших каждый экзамен.

      12. Напишите запрос для определения количества изучаемых предметов на каждом курсе.
1   2   3


написать администратору сайта