回答編集履歴
8
修正
answer
CHANGED
@@ -29,8 +29,7 @@
|
|
29
29
|
|
30
30
|
追記
|
31
31
|
---
|
32
|
-
焦っておられるのかもしれませんが、回答でのポイントを理解して頂いているとは思えないので、
|
32
|
+
焦っておられるのかもしれませんが、回答でのポイントを理解して頂いているとは思えないので、纏めておきます。
|
33
|
-
纏めておきます。
|
34
33
|
|
35
34
|
質問では、抽出条件の対象となるテーブルやカラムの型が相違することによって、抽出条件をどのようにすれば良いか分からないというところがポイントだったと思います。
|
36
35
|
|
7
追記
answer
CHANGED
@@ -25,4 +25,14 @@
|
|
25
25
|
※前提として、
|
26
26
|
・テーブル2およびテーブル3に登録されている会員IDはテーブル1には必ず登録されている
|
27
27
|
・テーブル2は会員IDにより一意である。
|
28
|
-
としています。
|
28
|
+
としています。
|
29
|
+
|
30
|
+
追記
|
31
|
+
---
|
32
|
+
焦っておられるのかもしれませんが、回答でのポイントを理解して頂いているとは思えないので、
|
33
|
+
纏めておきます。
|
34
|
+
|
35
|
+
質問では、抽出条件の対象となるテーブルやカラムの型が相違することによって、抽出条件をどのようにすれば良いか分からないというところがポイントだったと思います。
|
36
|
+
|
37
|
+
私の回答もA.Ichiさんの回答もそれらの形を揃えるというのがポイントです。
|
38
|
+
それぞれアプローチは違っており、A.Ichiさんの回答はunnest()によって配列を展開し、私の回答はarray_agg()で配列化するというものです。
|
6
改修
answer
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
group by 会員ID
|
18
18
|
) as t3
|
19
19
|
on t1.会員ID=t3.会員ID
|
20
|
-
where t1.住所 in ('東京')
|
20
|
+
where t1.住所 in ('東京') and t1.会員登録日>='20170701'
|
21
21
|
) t4 inner join (select unnest('{AA,SS,KK}'::text[]) as 内製_対象組織コード) t0
|
22
22
|
on t0.内製_対象組織コード=any(t4.複数組織コード) or t0.内製_対象組織コード=any(t4.内製_複数組織コード)
|
23
23
|
group by t0.内製_対象組織コード
|
5
追記
answer
CHANGED
@@ -22,4 +22,7 @@
|
|
22
22
|
on t0.内製_対象組織コード=any(t4.複数組織コード) or t0.内製_対象組織コード=any(t4.内製_複数組織コード)
|
23
23
|
group by t0.内製_対象組織コード
|
24
24
|
```
|
25
|
+
※前提として、
|
25
|
-
|
26
|
+
・テーブル2およびテーブル3に登録されている会員IDはテーブル1には必ず登録されている
|
27
|
+
・テーブル2は会員IDにより一意である。
|
28
|
+
としています。
|
4
修正
answer
CHANGED
@@ -5,21 +5,21 @@
|
|
5
5
|
|
6
6
|
```SQL
|
7
7
|
select
|
8
|
-
t0.対象組織コード, count(distinct t4.会員ID)
|
8
|
+
t0.内製_対象組織コード, count(distinct t4.会員ID)
|
9
9
|
from (
|
10
|
-
select t1.*, t3.複数組織コード
|
10
|
+
select t1.*, t3.内製_複数組織コード
|
11
11
|
from テーブル1 as t1
|
12
12
|
inner join テーブル2 t2
|
13
13
|
on t1.会員ID=t2.会員ID and アクションフラグ=0
|
14
14
|
left join (
|
15
|
-
select 会員ID, array_agg(distinct 組織コード) as 複数組織コード
|
15
|
+
select 会員ID, array_agg(distinct 組織コード) as 内製_複数組織コード
|
16
16
|
from テーブル3
|
17
17
|
group by 会員ID
|
18
18
|
) as t3
|
19
19
|
on t1.会員ID=t3.会員ID
|
20
20
|
where t1.住所 in ('東京')
|
21
|
-
) t4 inner join (select unnest('{AA,SS,KK}'::text[]) as 対象組織コード) t0
|
21
|
+
) t4 inner join (select unnest('{AA,SS,KK}'::text[]) as 内製_対象組織コード) t0
|
22
|
-
on t0.対象組織コード=any(t4.複数組織コード) or t0.対象組織コード=any(t4.複数組織コード
|
22
|
+
on t0.内製_対象組織コード=any(t4.複数組織コード) or t0.内製_対象組織コード=any(t4.内製_複数組織コード)
|
23
|
-
group by t0.対象組織コード
|
23
|
+
group by t0.内製_対象組織コード
|
24
24
|
```
|
25
25
|
※前提として、テーブル2に登録のされている会員IDはテーブル1には必ず登録されている、としています。
|
3
追記
answer
CHANGED
@@ -21,4 +21,5 @@
|
|
21
21
|
) t4 inner join (select unnest('{AA,SS,KK}'::text[]) as 対象組織コード) t0
|
22
22
|
on t0.対象組織コード=any(t4.複数組織コード) or t0.対象組織コード=any(t4.複数組織コード2)
|
23
23
|
group by t0.対象組織コード
|
24
|
-
```
|
24
|
+
```
|
25
|
+
※前提として、テーブル2に登録のされている会員IDはテーブル1には必ず登録されている、としています。
|
2
修正
answer
CHANGED
@@ -3,4 +3,22 @@
|
|
3
3
|
テーブル2の組織コードの持ち方をテーブル1と同様に整形し、同様の結合になるようにしています。
|
4
4
|
データ状況によっては負荷が高いかもしれません。
|
5
5
|
|
6
|
-
|
6
|
+
```SQL
|
7
|
+
select
|
8
|
+
t0.対象組織コード, count(distinct t4.会員ID)
|
9
|
+
from (
|
10
|
+
select t1.*, t3.複数組織コード as 複数組織コード2
|
11
|
+
from テーブル1 as t1
|
12
|
+
inner join テーブル2 t2
|
13
|
+
on t1.会員ID=t2.会員ID and アクションフラグ=0
|
14
|
+
left join (
|
15
|
+
select 会員ID, array_agg(distinct 組織コード) as 複数組織コード
|
16
|
+
from テーブル3
|
17
|
+
group by 会員ID
|
18
|
+
) as t3
|
19
|
+
on t1.会員ID=t3.会員ID
|
20
|
+
where t1.住所 in ('東京')
|
21
|
+
) t4 inner join (select unnest('{AA,SS,KK}'::text[]) as 対象組織コード) t0
|
22
|
+
on t0.対象組織コード=any(t4.複数組織コード) or t0.対象組織コード=any(t4.複数組織コード2)
|
23
|
+
group by t0.対象組織コード
|
24
|
+
```
|
1
修正
answer
CHANGED
@@ -3,21 +3,4 @@
|
|
3
3
|
テーブル2の組織コードの持ち方をテーブル1と同様に整形し、同様の結合になるようにしています。
|
4
4
|
データ状況によっては負荷が高いかもしれません。
|
5
5
|
|
6
|
-
|
6
|
+
訂正中・・・
|
7
|
-
select
|
8
|
-
t0.対象組織コード, count(distinct t1.会員ID)
|
9
|
-
from (select unnest('{AA,SS,KK}'::text[]) as 対象組織コード) as t0
|
10
|
-
inner join テーブル1 as t1
|
11
|
-
on t0.対象組織コード=any(t1.複数組織コード)
|
12
|
-
inner join テーブル2 t2
|
13
|
-
on t1.会員ID=t2.会員ID and アクションフラグ=0
|
14
|
-
left join (
|
15
|
-
select 会員ID, array_agg(distinct 組織コード) as 複数組織コード
|
16
|
-
from テーブル3
|
17
|
-
group by 会員ID
|
18
|
-
) as t3
|
19
|
-
on t1.会員ID=t3.会員ID
|
20
|
-
and t0.対象組織コード=any(t3.複数組織コード)
|
21
|
-
where t1.住所 in ('東京')
|
22
|
-
group by t0.対象組織コード
|
23
|
-
```
|