Базы данных
и язык SQL

Решение примера 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

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

NameJobSalary
MarenghiMgr17506.8
SandersMgr18357.5
Z-TOTALMgr35864.3
DoctorSales12322.4
FactorSales16228.7
PernalSales18171.2
Z-TOTALSales46722.3
Z-TOTALZ-ALL82586.6