AND LOWER(t.Dolgnost ) = 'профессор'
GROUP BY d.Name_kafedru
HAVING COUNT(*) > 0;
Фраза HAVING без GROUP BY
Фраза HAVING может использоваться лишь при наличии фразы GROUP BY. Из этого правила синтаксис SQL допускает только одно исключение: когда вся таблица интерпретируется как одна группа. В этом случае в списке фразы SELECT можно использовать только константы, агрегатные функции и выражения над ними. Приведем примеры.
Если суммарная зарплата всех преподавателей превышает 15 000, вывести их минимальную ставку, максимальную надбавку и суммарную зарплату.
SELECT MIN(Salary), MAX(Rise), SUM(Salary + Rise)
FROM TEACHER
HAVING SUM(Salary + Rise) > 15000;
При наличии фразы WHERE сначала производится отбор строк согласно ее условию, и только после этого применяется условие фразы HAVING.
Если суммарная зарплата всех ассистентов превышает 2500, вывести их среднюю ставку, среднюю надбавку и суммарную зарплату.
SELECT AVG(Salary), AVG(Rise), SUM(Salary + Rise)
FROM TEACHER
WHERE LOWER(Dolgnost ) = 'ассистент'
HAVING SUM(Salary + Rise) > 2500;
На практике фраза HAVING очень редко используется без фразы GROUP BY, изза чего такая возможность предоставляется не во всех СУБД.
Пример выполнения задания для предметной области «Запись на прием»:
Для выполнения нескольких операций с данными выберем таблицу.
В созданной базе данных рассмотрим таблицу Visit.
Рис. 8.1. Вывод данных таблицы “visit”.
Применив команды Group by и Having можно сгруппировать данные и отсортировать по цене выше среднего.
Рис. 8.2. Cортировка по цене выше среднего в таблице “visit”.
Следует отметить, что предложение HAVING может использоваться и без предложения GROUP BY. При отсутствии предложения GROUP BY агрегатные функции применяются ко всему выходному набору строк запроса, т.е. в результате мы получим всего одну строку, если выходной набор не пуст.
Таким образом, если условие на агрегатные значения в предложение HAVING будет истинным, то эта строка будет выводиться, в противном случае мы не получим ни одной строки. Рассмотрим такой запрос.
Рис. 8.3. Применение агрегатных функции в таблице “visit”.
Этот запрос показывает минимальную, максимальную и среднюю цену в таблице визитов. Далее этому запросу применим команду Having с двумя разными условиями. В первом случае имеем результат такой же как и выше.
Рис. 8.4. Применение агрегатных функции в таблице “visit”.
Во втором запросе результата нет, то есть он пустой. Это означает что в таблице нет данных удовлетворяющих условию.
Далее рассмотрим запрос где используются фразы Order by, Group by и Having. Запрос составлен для того чтобы найти доход врачей, у кого количество пациентов больше одного.
Do'stlaringiz bilan baham: |