Групповые функции SQL
Групповые функции необходимы для определения статистических данных на основе наборов числовых значений:
Avg – вычисляет арифметическое среднее набора чисел, содержащихся в указанном поле запроса;
Count – вычисляет количество выделенных записей в запросе;
Min, Max – возвращают минимальное и максимальное значения из набора в указанном поле запроса;
StDev, StDevPs - возвращают среднеквадратическое отклонение генеральной совокупности и выборки для указанного поля в запросе;
Sum – возвращает сумму значений в заданном поле запроса;
Var, VarPs – возвращают дисперсию распределения генеральной совокупности и выборки для указанного поля в запросе.
Для определения полей группирования указывается ключевое слово GROUP BY. Можно указать также слово HAVING для заданного условия по группе при вычислении групповых значений.
Пример 19.75.
SELECT Фамилия, Аvg(Результат) AS Средний_балл FROM Результаты
GROUP BY [№ зач.книжки]
SELECT [Код дисциплины], Аvg(Результат) AS Средний_балл
FROM Результаты GROUP BY [Код дисциплины]
В первом случае создается список фамилий студентов с указанием среднего балла по каждому студенту, во втором случае – список кодов дисциплин и средний балл по дисциплине.
Пример 19.76.
SELECT Фамилия, Avg(Результат) AS Средний_балл FROM Результаты
GROUP BY [№ зач.книжки] HAVING Аvg(Результат) > 4.5
SELECT [Код дисциплины], Avg(Результат) AS Средний_балл
FROM Результаты GROUP BY [Код дисциплины] HAVING Аvg(Результат) < 4
В первом случае создается список фамилий студентов с указанием среднего балла по каждому студенту, выводятся фамилии тех студентов, которые имеют средний балл выше 4.5. Во втором случае выводится список кодов дисциплин со средним баллом при условии, что он ниже 4.
Подчиненный запрос
В инструкцию SELECT может быть вложена другая инструкция SELECT, SELECT...INTO, INSERT...INTO, DELETE или UPDATE. Различают основной и подчиненные запросы, которые являются вложенными в основной запрос.
Подчиненный запрос можно использовать вместо выражения в списке полей инструкции SELECT или в предложениях WHERE и HAVING.
Существуют три типа подчиненных запросов:
сравнение (ANY | ALL | SOME) (инструкция);
выражение [NOT] IN (инструкция);
[NOT] EXISTS (инструкция).
Первый тип – сравнение выражения с результатом подчиненного запроса.
Ключевые слова:
ANY – каждый (сравнение с каждым элементом подчиненной выборки).
ALL – все (сравнение со всеми элементами подчиненной выборки).
SOME – некоторые (сравнение с некоторыми элементами подчиненной выборки).
Пример 19.77.
SELECT* FROM Оценка WHERE [Результат] > ANY
(SELECT [Результат] FROM Оценка
WHERE Результат.[№ зач.книжки]="123124")
Отбираются только те записи из таблицы Оценка, в которых значение результата больше (выше) каждой оценки студента с № зач.книжки 123124.
Второй тип – выражение, которое должно быть найдено в наборе записей, являющихся результатом выполнения подчиненного запроса.
Пример 19.78.
SELECT * FROM Студент WHERE [№ зач.книжки] IN
(SELECT [№ зач.книжки] FROM Оценка WHERE [Результат] > =4)
SELECT * FROM Дисциплина WHERE [Код дисциплины] NOT IN
(SELECT [Код дисциплины] FROM Оценка)
В первом случае отбираются студенты, которые в таблице Оценка имеют результат 4 или выше.
Во втором случае отбираются дисциплины, которые не встречаются в таблице Оценка.
Третий тип – инструкция SELECT, заключенная в круглые скобки, с предикатом EXISTS (с необязательным зарезервированным словом NOT) в логическом выражении для определения, должен ли подчиненный запрос возвращать какие-либо записи.
Пример 19.79.
SELECT* FROM Студент WHERE EXISTS
(SELECT * FROM Оценка WHERE Сотрудник.[№ зач.книжки]=
Оценка.[№ зач.книжки])
Отбираются студенты, которые имеют хотя бы одну оценку.
Дата добавления: 2015-11-28; просмотров: 4583;