質問させていただきます。
タイトルにもある通り、
大グループの中で、複数の小グループに属している人の人数を知りたいのですが、
sqlが思いつかない状態です。
お力を貸していただけないでしょうか。
【前提条件】
・SQLは方言に依存しないものを使用する(標準SQLで出したい)
・小グループのコードは重複しない
・ID(要は人)は他の大グループに所属していることもあるが大グループ毎に別人と考える
・複数小グループに属する数が2以上であればカウント
【得たい結果】
LARGE_GROUP | 人数 |
---|---|
A | 1 |
B | 2 |
C | 4 |
【テーブル内のデータ】
G_TABLE:グループテーブル
LARGE_GROUP | SMALL_GROUP | ID |
---|---|---|
A | 101 | X000001 |
A | 102 | X000001 |
A | 101 | X000002 |
A | 102 | X000003 |
B | 201 | Y000001 |
B | 202 | Y000001 |
B | 201 | Y000002 |
B | 202 | Y000002 |
C | 301 | X000001 |
C | 302 | X000001 |
C | 303 | X000001 |
C | 301 | Z000001 |
C | 302 | Z000001 |
C | 301 | Z000002 |
C | 303 | Z000002 |
C | 304 | Z000003 |
C | 305 | Z000003 |
【人数の内訳】
大グループA
・X000001が101と102の小グループに属している。
大グループB
・Y000001が201と202に属している
・Y000002が201と202に属している
大グループC
・X000001が301と302と303に属している
・Z000001が301と302に属している
・Z000002が301と303に属している
・Z000003が304と305に属している
【自分で思いつき、試してみたSQL】
SQL
1SELECT 2 LARGE_GROUP, 3 COUNT(ID) AS 人数 4FROM 5 G_TABLE origin 6inner join 7( 8 SELECT 9 KAKEMOCHI.LARGE_GROUP 10 KAKEMOCHI.KAKEMOCHI_ID 11 FROM ( 12 SELECT 13 LARGE_GROUP AS KAKEMOCHI_ID_LG, 14 ID AS KAKEMOCHI_ID, 15 COUNT(SMALL_GROUP) AS JOINCOUNT 16 FROM 17 G_TABLE 18 GROUP BY 19 LARGE_GROUP, 20 ID 21 HAVING JOINCOUNT > 1 22 ) KAKEMOCHI --複数小グループに属している人の大グループとIDを出したテーブル 23ON 24 origin.LARGE_GROUP = KAKEMOCHI.LARGE_GROUP 25AND origin.ID = KAKEMOCHI.ID 26GROUP BY 27 origin.LARGE_GROUP 28
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー