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

Чтение книги онлайн.

Читать онлайн книгу Основы программирования в СУБД Oracle. SQL+PL/SQL. - О. А. Ткачев страница 28

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

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

имеющих рейтинг 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. Найти максимальное число сотрудников работающих в одном отделе

      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, этот запрос выводит данные о количестве сотрудников в каждом отделе и общем количестве сотрудников, работающих в рассматриваемых отделах.

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

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