sql
1SELECT COUNT(ID2) FROM M_T GROUP BY ID3 HAVING COUNT(ID2) > 1;
「ID2の『要素』が複数」っていうのがちょっと謎。
『要素』が『データの種類』って意味なら上の文は間違いなので理解のしにくさに拍車をかける。
『要素』が『行の数』って意味ならID2の値は全く関係ないため…コレガワカラナイ
上の文だとID3が2でも3でもcount(ID2)は2(行)です。
つまりサンプルデータでは「HAVING COUNT(ID2) > 1」は1行も絞れてない。
sql
1; with M_T(ID, name, ID2, ID3) as (
2 select 1 , 'aaa' , 1 , 2
3 union all select 2 , 'bbb' , 1 , 3
4 union all select 3 , 'ccc' , 2 , 2
5 union all select 4 , 'ddd', 1 , 3
6)
7SELECT ID3
8 ,COUNT(ID2) as 行数
9FROM M_T
10GROUP BY ID3
11HAVING COUNT(ID2) > 1;
12
13/*
14ID3 行数
15----------- -----------
162 2
173 2
18
19(2 行処理されました)
20*/
countはdistinct中に入れないと『データの種類』にはならない。
sql
1; with M_T(ID, name, ID2, ID3) as (
2 select 1 , 'aaa' , 1 , 2
3 union all select 2 , 'bbb' , 1 , 3
4 union all select 3 , 'ccc' , 2 , 2
5 union all select 4 , 'ddd', 1 , 3
6)
7SELECT ID3
8 ,COUNT(distinct ID2) as 行数
9FROM M_T
10GROUP BY ID3
11HAVING COUNT(distinct ID2) > 1;
12
13/*
14ID3 行数
15----------- -----------
162 2
17
18(1 行処理されました)
19*/
ID3さえ取れればsazi氏と同じでwhere ID3 in (select ID3 ~)で消せばok