Запрос, результат которого сгруппирован по одному полю и не содержит NULL значений
Есть таблица Employers. Нужно узнать ФОТ всех аналитиков и разработчиков в разрезе номеров подразделений и позиций.
+-------------+------------------------+----------+
| unit_number | position | Salary |
+-------------+------------------------+----------+
| 1 | Разработчик | 50000.00 |
| 1 | Разработчик | 55000.00 |
| 1 | Аналитик | 60000.00 |
| 2 | Разработчик | 45000.00 |
| 2 | Аналитик | 64000.00 |
| 4 | Разработчик | 50000.00 |
+-------------+------------------------+----------+
Чтобы получился следующий результат из 6 столбцов, unit_number не нужен:
+------------------------+-------------+-----------+----------+------+----------+-------------+
| position | | 1Sum | 2Sum | 3Sum | 4Sum | SUM(Salary) |
+------------------------+-------------+-----------+----------+------+----------+-------------+
| Аналитик | | 60000.00 64000.00 | 0 | 0 | 124000.00 |
| Разработчик | | 105000.00 | 45000.00 | 0 | 50000.00 | 200000.00 |
+------------------------+-------------+-----------+----------+------+----------+-------------+
У меня почему-то не работают варианты вроде MAX(CASE) выдает ошибку синтаксиса и ошибка группировки.
mysql> SELECT position, unit_number, (CASE WHEN unit_number = 1 THEN SUM(Salary) END) AS 1Sum, (CASE WHEN unit_number = 2 THEN SUM(Salary) END) AS 2Sum, (CASE WHEN unit_number = 3 THEN SUM(Salary) END) AS 3Sum, (CASE WHEN unit_number = 4 THEN SUM(Salary) END) AS 4Sum, SUM(Salary) FROM Employers GROUP BY position, unit_number ORDER BY position;
+------------------------+-------------+-----------+----------+------+----------+-------------+
| position | unit_number | 1Sum | 2Sum | 3Sum | 4Sum | SUM(Salary) |
+------------------------+-------------+-----------+----------+------+----------+-------------+
| Аналитик | 1 | 60000.00 | NULL | NULL | NULL | 60000.00 |
| Аналитик | 2 | NULL | 64000.00 | NULL | NULL | 64000.00 |
| Разработчик | 1 | 105000.00 | NULL | NULL | NULL | 105000.00 |
| Разработчик | 2 | NULL | 45000.00 | NULL | NULL | 45000.00 |
| Разработчик | 4 | NULL | NULL | NULL | 50000.00 | 50000.00 |
+------------------------+-------------+-----------+----------+------+----------+-------------+
5 rows in set (0.00 sec)
Если использовать этот вариант:
sum(case WHEN unit_number = 1 THEN Salary END)
то все равно получается таблица с NULL.
А мне нужно, чтобы получилось всего две строки: один Аналитик и один Разработчик.
А далее суммирование общих зарплат по юнитам.
И в последнем столбце по всем юнитам.