Ткачев О. А. - Основы программирования в СУБД Oracle. SQL+PL/SQL. стр 13.

Книгу можно купить на ЛитРес.
Всего за 239.9 руб. Купить полную версию
Шрифт
Фон

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

Пример 4.17. Найти максимальное число сотрудников работающих в одном отделе

SELECT Max (COUNT (*))

FROM Employees

GROUP BY department_id;

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

Пример 4.18. Найти отдел, в котором работает максимальное число сотрудников.

SELECT department_id, COUNT (*)

FROM Employees

GROUP BY department_id

HAVING COUNT (*) =

(SELECT MAX (COUNT (*))

FROM Employees

GROUP BY department_id);

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

Оператор GROUP BY ROLLUP

Расширяет возможности GROUP BY, возвращая для каждой группы строку, содержащую итоги по группе, а также строку, содержащую общий итог для всех групп, и имеет следующий вид:

GROUP BY ROLLUP {список столбцов}

Для демонстрации возможностей, которые предоставляет оператор GROUP BY ROLLUP, рассмотрим следующую задачу: для каждого отдела определить должности и количество сотрудников, занимающих эту должность. Решение этой задачи без использования ROLLUP содержится в примере 4.10.

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

SELECT department_id, job_id, count (*)

FROM Employees

WHERE department_id IN (30,50)

GROUP BY ROLLUP (department_id, job_id)

ORDER BY department_id;

По сравнению

с результатами, которые выводит запрос из примера 4.10, этот запрос выводит данные о количестве сотрудников в каждом отделе и общем количестве сотрудников, работающих в рассматриваемых отделах.

В условия группировки можно добавить столбец rating_e.

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

SELECT department_id, job_id, rating_e, count (*)

FROM Employees

WHERE department_id IN (30,50)

GROUP BY ROLLUP (department_id, job_id, rating_e)

ORDER BY department_id;

Оператор GROUP BY CUBE

Возвращает предварительные итоги для всех комбинаций столбцов и строку с общим итогом и имеет следующий вид:

GROUP BY CUBE {список столбцов}

Рассмотрим решение предыдущих задач с использованием этого оператора.

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

SELECT department_id, job_id, count (*)

FROM Employees

WHERE department_id IN (30,50)

GROUP BY CUBE (department_id, job_id)

ORDER BY department_id;

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

В примере 4.22 приведен вариант решения задачи из примера 4.20 с использованием оператора GROUP BY CUBE.

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

Конец ознакомительного фрагмента.
Купить и читать книгу

Прочитайте эту книгу целиком,

на ЛитРес.

Ваша оценка очень важна

0

Дальше читают

Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

Скачать книгу

Если нет возможности читать онлайн, скачайте книгу файлом для электронной книжки и читайте офлайн.

fb2.zip txt txt.zip rtf.zip a4.pdf a6.pdf mobi.prc epub ios.epub fb3