Оценить:
 Рейтинг: 0

Основы программирования в СУБД Oracle. SQL+PL/SQL.

Год написания книги
2020
<< 1 ... 19 20 21 22 23 24 >>
На страницу:
23 из 24
Настройки чтения
Размер шрифта
Высота строк
Поля

Причина ошибки: при наличии группировки предложение SELECT может содержать только столбцы, по которым осуществляется группировка и агрегатные функции.

Пример 4.10б. Для отделов 30 и 50 определить должности и количество сотрудников, занимающих каждую должность

SELECT department_id, job_id, count (*)

FROM Employees

WHERE department_id IN (30,50)

GROUP BY department_id, job_id

ORDER BY department_id;

Пример 4.11. Для отделов, номер которых меньше 50, вывести рейтинги, которые имеют сотрудники этого отдела, их количество и суммарную зарплату

SELECT department_id, rating_e, count (*),sum (salary)

FROM Employees

WHERE department_id <= 50

GROUP BY department_id, rating_e

ORDER BY department_id;

Использование условий на группу

Условия на группу указываются в предложении HAVING.

Пример 4.12. Вывести суммарную зарплату для тех отделов, у которых суммарная зарплата превышает 50 000

SELECT department_id, SUM (salary)

FROM Employees

GROUP BY department_id

HAVING SUM (salary)> 50000;

Условие выборки может быть проверено до группировки. В этом случае сначала выбираются строки, удовлетворяющие условию, а потом осуществляется группировка полученных данных. Для полученных групп можно указать условие в предложении HAVING. В результат запроса попадут только те группы, которые удовлетворяют этому условию.

Пример 4.13. Вывести должности и количество сотрудников, которые получают зарплату более 10 000

SELECT department_id, SUM (salary)

FROM Employees

GROUP BY department_id

HAVING SUM (salary)> 50000;

К условиям предыдущей задачи можно добавить условие: вывести только те должности, которые занимают более одного сотрудника.

Пример 4.14. Вывести должности и количество сотрудников, которые получают зарплату более 10 000, которые занимают более одного сотрудника, упорядочив их в порядке убывания количества сотрудников

SELECT job_id, COUNT (*) As num_job

FROM Employees

WHERE salary> 10000

GROUP BY job_id

HAVING COUNT (*)> 1

ORDER BY num_job DESC;

Пример 4.15. Вывести номера отделов, у которых число сотрудников, имеющих рейтинг 5, больше одного, количество сотрудников, имеющих рейтинг 5, и их суммарную зарплату

SELECT department_id, rating_e, count (*),sum (salary)

FROM Employees

WHERE rating_e = 5

GROUP BY department_id, rating_e

HAVING count (*)> 1

ORDER BY department_id;

Использование вложенных агрегатных функций

Хотя Oracle и допускает использование вложенных агрегатных функций, но только на один уровень и только в предложении SELECT. При этом предложение SELECT не должно содержать других элементов.

Пример 4.16. Определить количество сотрудников в каждом отделе

SELECT department_id, count (*)

FROM Employees

GROUP BY department_id

ORDER BY department_id;

Используя вложенные агрегатные функции, можно найти максимальное число сотрудников, работающих в одном отделе.

Пример 4.17. Найти максимальное число сотрудников работающих в одном отделе
<< 1 ... 19 20 21 22 23 24 >>
На страницу:
23 из 24