|
Программирование >> Неопределенные и пропущенные значения
2.4. Агрегирование и групповые функции 45 чение поля 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, указывают только поля или выражения, которые на выходе имеют единственное значение для каждой выводимой группы. Упражнения Напишите запрос для подсчета количества студентов, сдававших экзамен по предмету обучения с идентификатором, равным 20. 46 2. Выборка данных (оператор SELECT) 2. Напишите запрос, который позволяет подсчитать в таблице EXAM MARKS количество различных предметов обучения. 3. Напишите запрос, который выполняет выборку для каждого студента значения его идентификатора и минимальной из полученных им оценок. 4. Напишите запрос, осуществляющий выборку для каждого студента значения его идентификатора и максимальной из полученных им оценок. 5. Напишите запрос, выполняющий вывод фамилии первого в алфавитном порядке (по фамилии) студента, фамилия которого начинается на букву И . 6. Напишите запрос, который выполняет вывод (для каждого предмета обучения) наименования предмета и максимального значения номера семестра, в котором этот предмет преподается. 7. Напишите запрос, который выполняет вывод даннтх для каждого конкретного дня сдачи экзамена о количестве студентов, сдававших экзамен в этот день. 8. Напишите запрос для получения среднего балла для каждого курса по каждому предмету. 9. Напишите запрос для получения среднего балла для каждого студента. 10. Напишите запрос для получения среднего балла для каждого экзамена. 11. Напишите запрос для определения количества студентов, сдававших каждый экзамен. 12. Напишите запрос для определения количества изучаемых предметов на каждом курсе. 2.5. Пустые значения (NULL) в агрегирующих функциях Наличие пустхх (NULL) значений в полях таблицы определяет особенности выполнения агрегирующих операций над даннтми, которые следует учитывать в SQL-запросах. 2.5.1. Влияние NULL-значений в функции COUNT Если аргумент функции COUNT является константой или столбцом без пуст1х значений, то функция возвращает количество строк, к которым применимо определенное условие или группирование. 2.6. Результат действия трехзначн1х условных операторов 47 Если аргументом функции является столбец, содержащий пустое значение, то COUNT вернет число строк, которые не содержат пустые значения и к которхм применимо определенное в COUNT условие или группирование. Если бы механизм NULL не бхл доступен, то неприменимые и отсутствующие значения пришлось бы исключать с помощью КОНСТРУКЦИИ WHERE. Поведение функции COUNT(*) не зависит от пустхх значений. Она возвратит общее количество строк в таблице. 2.5.2. Влияние NULL-значений в функции AVG Среднее значение множества чисел равно сумме чисел, деленной на число элементов множества. Однако если некоторые элементы пусты (то есть их значения неизвестны или не существуют), деление на количество всех элементов множества приведет к неправильному результату. Функция AVG вхчисляет среднее значение всех известных значений множества элементов, то есть эта функция подсчитывает сумму известных значений и делит ее на количество этих значений, а не на общее количество значений, среди которых могут быть NULL-значения. Если столбец состоит только из пустых значений, то функция AVG также возвратит NULL. 2.6. Результат действия трехзначных условных операторов Условные операторы при отсутствии пустхх значений возвращают либо TRUE (истина), либо FALSE (ложь). Если же в столбце присутствуют пустые значения, то может быть возвращено и третье значение: UNKNOWN (неизвестно). В этой схеме, например, условие WHERE А = 2, где А - имя столбца, значения которого могут бхть неизвестны, при А = 2 будет соответствовать TRUE, при А = 4 в результате будет получено значение FALSE, а при отсутствующем значении А (NULL-значение) результат будет UNKNOWN. Пустые значения оказывают влияние на использование логических операторов NOT, AND и OR.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |