回答編集履歴
6
訂正
test
CHANGED
@@ -28,34 +28,34 @@
|
|
28
28
|
|
29
29
|
with rows as (
|
30
30
|
|
31
|
-
select id2, count(*) cnt
|
31
|
+
select id2, count(*) cnt from test2
|
32
|
-
|
33
|
-
from test2
|
34
32
|
|
35
33
|
group by id2
|
34
|
+
|
35
|
+
), temp as (
|
36
|
+
|
37
|
+
select id2 from rows
|
38
|
+
|
39
|
+
where cnt = (select max(cnt) from rows)
|
36
40
|
|
37
41
|
)
|
38
42
|
|
39
43
|
select *
|
40
44
|
|
41
|
-
from
|
45
|
+
from test
|
42
46
|
|
43
47
|
where (
|
44
48
|
|
45
|
-
|
49
|
+
id in (select ID2 from temp) -- レコード数が最大のものがある場合
|
46
50
|
|
47
|
-
|
51
|
+
or not exists( -- 同じ値がない場合
|
48
52
|
|
49
|
-
|
53
|
+
select 1 from test2 where id2=test.id
|
50
54
|
|
51
|
-
|
55
|
+
)
|
52
56
|
|
53
|
-
|
57
|
+
)
|
54
58
|
|
55
|
-
)
|
56
|
-
|
57
|
-
)
|
58
|
-
|
59
|
-
|
59
|
+
and (foo = 値1 or id = 値2)
|
60
60
|
|
61
61
|
```
|
5
改良
test
CHANGED
@@ -28,15 +28,11 @@
|
|
28
28
|
|
29
29
|
with rows as (
|
30
30
|
|
31
|
-
|
31
|
+
select id2, count(*) cnt, count(*) over() max_cnt
|
32
32
|
|
33
|
-
|
33
|
+
from test2
|
34
34
|
|
35
|
-
|
35
|
+
group by id2
|
36
|
-
|
37
|
-
select id2 from rows
|
38
|
-
|
39
|
-
where cnt = (select max(cnt) from rows)
|
40
36
|
|
41
37
|
)
|
42
38
|
|
@@ -46,7 +42,11 @@
|
|
46
42
|
|
47
43
|
where (
|
48
44
|
|
45
|
+
id in ( -- レコード数が最大のもの
|
46
|
+
|
49
|
-
|
47
|
+
select ID2 from rows where cnt=max_cnt
|
48
|
+
|
49
|
+
)
|
50
50
|
|
51
51
|
or not exists( -- 同じ値がない場合
|
52
52
|
|
4
推敲
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
結果が却って来ないのは、直積の片側が0件なら、結果は0件だからです。
|
1
|
+
結果が却って来ないのは、直積の片側が0件なら、結果(0との積算)は0件だからです。
|
2
2
|
|
3
3
|
full join すれば結果は却ります。
|
4
4
|
|
3
訂正
test
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
where (
|
48
48
|
|
49
|
-
id
|
49
|
+
id in (select ID2 from temp) -- レコード数が最大のものがある場合
|
50
50
|
|
51
51
|
or not exists( -- 同じ値がない場合
|
52
52
|
|
2
訂正
test
CHANGED
@@ -46,11 +46,11 @@
|
|
46
46
|
|
47
47
|
where (
|
48
48
|
|
49
|
-
id = (selct ID2 from temp) -- レコード数が最大のものがある場合
|
49
|
+
id = (select ID2 from temp) -- レコード数が最大のものがある場合
|
50
50
|
|
51
51
|
or not exists( -- 同じ値がない場合
|
52
52
|
|
53
|
-
select 1 from test2 where id2=
|
53
|
+
select 1 from test2 where id2=test.id
|
54
54
|
|
55
55
|
)
|
56
56
|
|
1
追記
test
CHANGED
@@ -19,3 +19,43 @@
|
|
19
19
|
on temp.id=temp2.id
|
20
20
|
|
21
21
|
```
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
やりたいことがいまいち理解できませんが、組み替えてみました。
|
26
|
+
|
27
|
+
```SQL
|
28
|
+
|
29
|
+
with rows as (
|
30
|
+
|
31
|
+
select id2, count(*) cnt from test2
|
32
|
+
|
33
|
+
group by id2
|
34
|
+
|
35
|
+
), temp as (
|
36
|
+
|
37
|
+
select id2 from rows
|
38
|
+
|
39
|
+
where cnt = (select max(cnt) from rows)
|
40
|
+
|
41
|
+
)
|
42
|
+
|
43
|
+
select *
|
44
|
+
|
45
|
+
from test
|
46
|
+
|
47
|
+
where (
|
48
|
+
|
49
|
+
id = (selct ID2 from temp) -- レコード数が最大のものがある場合
|
50
|
+
|
51
|
+
or not exists( -- 同じ値がない場合
|
52
|
+
|
53
|
+
select 1 from test2 where id2=.test.id
|
54
|
+
|
55
|
+
)
|
56
|
+
|
57
|
+
)
|
58
|
+
|
59
|
+
and (foo = 値1 or id = 値2)
|
60
|
+
|
61
|
+
```
|