160 likes | 324 Views
Язык SQL. Применение агрегатных функций и вложенных запросов в операторе выбора. Агрегатные функции.
E N D
Язык SQL Применение агрегатных функций и вложенных запросов в операторе выбора
Рассмотрим базу данных, которая моделирует сдачу сессии в некотором учебном заведении, Пусть она состоит из трех отношении R1, R2, Rз- Будем считать, что они представлены таблицами R1, R2 и R3 соответственно. • R1 =(ФИО, Дисциплина, Оценка); R2 = (ФИО, Группа); R3 = (Группы, Дисциплина )
Пример с Count() • Посчитать количество 2-к за экзамен «базы данных» SELECT “количество 2-к =” count(*) FROM R1 WHERE Дисциплина =“Базы данных” AND “Оценка” = 2 • Результат Количесто 2-к = 2
Рассмотрим подробно, как работает этот запрос
определить для каждой группы и каждой дисциплины количество успешно сдавших экзамен и средний балл по дисциплине.
Отбор групп • Построим запрос, который выводит группы, в которых по одной дисциплине на экзаменах получено больше одной двойки
БД Банк • F = (N, ФИО, Филиал, ДатаОткрытия, ДатаЗакрытия, Остаток); • Q = (Филиал, Город); • Например, предположим, что мы хотим найти суммарный остаток на счетах филиалах. • SELECT SUM(Oстаток) FROM F • GROUP BY Филиал;
Особенности HAVING • Аргументы в предложении HAVING подчиняются тем же самым правилам, что и в предложении SELECT, где используется GROUP BY. Они должны иметь одно значение на группу вывода. Пример неправильного запроса SELECT Филиал, SUM(Остаток) FROM F GROUP ВУФилиал HAVING ДатаОткрытия = 27/12/1999:
Особенности Having • предложение HAVING должно ссылаться только на агрегаты и поля, выбранные GROUP BY. Имеется правильный способ сделать вышеупомянутый запрос: SELECT Филиал, SUM(Остаток) - FROM F WHERE ДатаОткрытия = '27/12/1999' GROUP BY Филиал; Смысл данного запроса следующий: найти сумму остатков по каждому филиалу счетов, открытых 27 декабря 1999 года.
Пример • суммарные остатки на счетах филиалов в Санкт-Петербурге, Пскове и Урюпинске: SELECT Филиал, SUM(Ocтaток) FROM F, Q WHERE F.Филиал = Q.Филиал GROUP BY Филиал HAVING Филиал IN («Санкт-Петербург». «Псков», «Урюпинск»);