簡単なはずなのに遅くて苦労しています。
たとえば、(オラクル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であることがわかります。これは、bobが4つの異なるevent_idに関連付けられているためです。3つはバーテンダー、1つはドアマンです。
(2人のスタッフが同じ名前を持っておらず、誰も一度に2つの仕事をすることができないと仮定します)
どうすればよいですか?
1つの「役割」については明らかです:
select count(event_id), bar group by bar
しかし、完全結合と文字列連結なしで、すべての列に対してこれを行うためのエレガントな方法はありますか?
ありがとう!
あなたはあり数えるネストされた内側のクエリで文字列の列で、その後、合計それらをアップし、ご希望に外の順序:
SELECT sum(count) count, person
FROM
(
SELECT count(event_id) count, bar person FROM mytable GROUP BY bar UNION ALL
--> P.S. Only aliasing as "person" is enough in this upper "select" for all
--> four "select" statements inside the parentheses.
SELECT count(event_id) , doors FROM mytable GROUP BY doors UNION ALL
SELECT count(event_id) , cloak_room FROM mytable GROUP BY cloak_room UNION ALL
SELECT count(event_id) , keg_room FROM mytable GROUP BY keg_room
)
GROUP BY person
ORDER BY 1 desc, 2;
COUNT PERSON
4 bob
4 john
3 bill
3 mary
2 kev
2 louise
1 jay
1 jennifer
1 kyle
1 mary2
1 sarah
1 steve
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加