【发布时间】:2018-12-11 00:33:03
【问题描述】:
我觉得这应该很容易,但为时已晚,我正在苦苦挣扎。
假设(在 oracle 12 db 中)我有一个表格,它表示在不同的事件中哪些员工在酒吧担任什么角色,如下所示:
+----------+----------+-------+------------+----------+
| 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 |
+-------+--------+
我们在这里看到 bob 的计数为 4 - 因为他与 4 个不同的 event_id 相关联:3 作为酒保,1 作为门卫。
(假设没有两个员工同名,也没有人可以同时做两份工作)
我该怎么做?
对于一个“角色”来说很明确:
select count(event_id), bar group by bar
但是是否有一种优雅的方法可以对所有列执行此操作 - 无需完全连接和字符串连接?
谢谢!
【问题讨论】:
标签: sql oracle group-by aggregation unpivot