Использование столбцов группировки во фразе HAVING
Рассмотрим использование во фразе HAVING условий отбора, заданных для
группируемых столбцов (или выражений над ними). Для этого усложним предыдущий
запрос.
Запрос 23. Вывести названия кафедр факультета математики и информатики, на
которых работают один и более профессоров. Указать также количество профессоров и
их суммарную зарплату.
SELECT d.Name_kafedru, Count(*), SUM(t.salary + t.Rise)
FROM FACULTET f, KAFEDRA d, TEACHER t
WHERE f.KOD_FACULTETA = d.KOD_FACULTETA AND
d.KOD_kafedru = t.KOD_kafedru AND
LOWER(f.Name_faculteta) = 'математики и информатики' AND
LOWER(t.Dolgnost ) = 'профессор'
GROUP BY d.Name_kafedru
HAVING COUNT(*) > 0;
Фраза HAVING без фразы GROUP BY
Выше мы указали, что фраза HAVING может использоваться лишь при наличии
фразы GROUP BY. Из этого правила синтаксис SQL допускает только одно исключение:
когда вся таблица интерпретируется как одна группа. В этом случае в списке фразы
SELECT можно использовать только константы, агрегатные функции и выражения над
ними. Приведем примеры.
Запрос 24. Если суммарная зарплата всех преподавателей превышает 15 000,
вывести их минимальную ставку, максимальную надбавку и суммарную зарплату.
SELECT MIN(Salary), MAX(Rise), SUM(Salary + Rise)
FROM TEACHER
HAVING SUM(Salary + Rise) > 15000;
При наличии фразы WHERE сначала производится отбор строк согласно ее
условию, и только после этого применяется условие фразы HAVING.
Запрос 25. Если суммарная зарплата всех ассистентов превышает 2500, вывести их
среднюю ставку, среднюю надбавку и суммарную зарплату.
SELECT AVG(Salary), AVG(Rise), SUM(Salary + Rise)
FROM TEACHER
WHERE LOWER(Dolgnost ) = 'ассистент'
Do'stlaringiz bilan baham: |