Запрос, результат которого сгруппирован по одному полю и не содержит 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.

А мне нужно, чтобы получилось всего две строки: один Аналитик и один Разработчик.
А далее суммирование общих зарплат по юнитам.
И в последнем столбце по всем юнитам.


Ответы (0 шт):