Решение примера 2 на запросы с оператором UNION
Пример 2. Данные - те же, что в примере 1, но задача немного посложнее. Требуется вывести в одной таблице не только индивидуальные размеры заработной платы, упорядоченные по должностям и суммарную заработную плату по должностям, но суммарную заработную плату по всем сотрудникам.
Решение. Для объединения с результатами первых двух запросов пишем третий запрос, который возвращает суммарную заработную плату по всем сотрудникам, в нём не требуется группировка по должностям:
SELECT 'Z-TOTAL' AS Name, 'Z-ALL' AS Job, SUM(Salary) AS Salary
FROM STAFF
Теперь объединим запросы при помощи оператора UNION. Окончательный запрос будет следующим:
SELECT Name, Job, Salary
FROM STAFF)
UNION
(SELECT 'Z-TOTAL' AS Name,
Job, SUM(Salary) AS Salary
FROM STAFF GROUP BY Job)
UNION
(SELECT 'Z-TOTAL' AS Name,
'Z-ALL' AS Job, SUM(Salary)
AS Salary FROM STAFF)
ORDER BY Job, Name
Результатом выполнения этого запроса будет следующая таблица:
Name | Job | Salary |
Marenghi | Mgr | 17506.8 |
Sanders | Mgr | 18357.5 |
Z-TOTAL | Mgr | 35864.3 |
Doctor | Sales | 12322.4 |
Factor | Sales | 16228.7 |
Pernal | Sales | 18171.2 |
Z-TOTAL | Sales | 46722.3 |
Z-TOTAL | Z-ALL | 82586.6 |