Я чувствую, что это должно быть легко, но уже поздно, и я изо всех сил.
Скажите (в оракуле 12 дБ) У меня есть таблица, которая показывает, какие сотрудники выполняли какие роли в баре во время различных событий, например:
+----------+----------+-------+------------+----------+
| event_id | bar | doors | cloak_room | keg_room |
+----------+----------+-------+------------+----------+
| 2 | bob | bill | john | mary |
+----------+----------+-------+------------+----------+
| 3 | bob | bill | mary | kev |
+----------+----------+-------+------------+----------+
| 4 | bob | john | louise | mary |
+----------+----------+-------+------------+----------+
| 5 | kyle | kev | sarah | louise |
+----------+----------+-------+------------+----------+
| 6 | jennifer | bob | jay | john |
+----------+----------+-------+------------+----------+
| 7 | john | bill | mary | steve |
+----------+----------+-------+------------+----------+
и я хочу получить общее количество событий, с которыми работал каждый сотрудник, например:
+-------+--------+
| count | person |
+-------+--------+
| 4 | bob |
+-------+--------+
| 4 | john |
+-------+--------+
| 3 | bill |
+-------+--------+
| 3 | mary |
+-------+--------+
| 2 | kev |
+-------+--------+
| 2 | louise |
+-------+--------+
| 1 | jay |
+-------+--------+
| 1 | steve |
+-------+--------+
Мы видим здесь, что у Боба есть счет 4 - потому что он связан с 4 различными event_id: 3 как бармен и 1 как швейцар.
(при условии, что нет двух сотрудников с одинаковыми именами, и никто не может работать на двух работах одновременно)
Как мне это сделать?
для одной «роли» ясно:
select count(event_id), bar group by bar
но есть ли элегантный способ сделать это для всех столбцов - без полных объединений и конкатов строк?
спасибо!