回答編集履歴

8

修正

2017/08/28 08:26

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -60,9 +60,7 @@
60
60
 
61
61
  ---
62
62
 
63
- 焦っておられるのかもしれませんが、回答でのポイントを理解して頂いているとは思えないので、
63
+ 焦っておられるのかもしれませんが、回答でのポイントを理解して頂いているとは思えないので、纏めておきます。
64
-
65
- 纏めておきます。
66
64
 
67
65
 
68
66
 

7

追記

2017/08/28 08:26

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -53,3 +53,25 @@
53
53
  ・テーブル2は会員IDにより一意である。
54
54
 
55
55
  としています。
56
+
57
+
58
+
59
+ 追記
60
+
61
+ ---
62
+
63
+ 焦っておられるのかもしれませんが、回答でのポイントを理解して頂いているとは思えないので、
64
+
65
+ 纏めておきます。
66
+
67
+
68
+
69
+ 質問では、抽出条件の対象となるテーブルやカラムの型が相違することによって、抽出条件をどのようにすれば良いか分からないというところがポイントだったと思います。
70
+
71
+
72
+
73
+ 私の回答もA.Ichiさんの回答もそれらの形を揃えるというのがポイントです。
74
+
75
+ それぞれアプローチは違っており、A.Ichiさんの回答はunnest()によって配列を展開し、私の回答はarray_agg()で配列化するというものです。
76
+
77
+

6

改修

2017/08/28 08:25

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  on t1.会員ID=t3.会員ID
38
38
 
39
- where t1.住所 in ('東京')
39
+ where t1.住所 in ('東京') and t1.会員登録日>='20170701'
40
40
 
41
41
  ) t4 inner join (select unnest('{AA,SS,KK}'::text[]) as 内製_対象組織コード) t0
42
42
 

5

追記

2017/08/28 08:06

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -46,4 +46,10 @@
46
46
 
47
47
  ```
48
48
 
49
+ ※前提として、
50
+
49
- ※前提として、テーブル2に登録されている会員IDはテーブル1には必ず登録されている、としています。
51
+ テーブル2およびテーブル3に登録されている会員IDはテーブル1には必ず登録されている
52
+
53
+ ・テーブル2は会員IDにより一意である。
54
+
55
+ としています。

4

修正

2017/08/28 07:14

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -12,11 +12,11 @@
12
12
 
13
13
  select
14
14
 
15
- t0.対象組織コード, count(distinct t4.会員ID)
15
+ t0.内製_対象組織コード, count(distinct t4.会員ID)
16
16
 
17
17
  from (
18
18
 
19
- select t1.*, t3.複数組織コード as 複数組織コード2
19
+ select t1.*, t3.内製_複数組織コード
20
20
 
21
21
  from テーブル1 as t1
22
22
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  left join (
28
28
 
29
- select 会員ID, array_agg(distinct 組織コード) as 複数組織コード
29
+ select 会員ID, array_agg(distinct 組織コード) as 内製_複数組織コード
30
30
 
31
31
  from テーブル3
32
32
 
@@ -38,11 +38,11 @@
38
38
 
39
39
  where t1.住所 in ('東京')
40
40
 
41
- ) t4 inner join (select unnest('{AA,SS,KK}'::text[]) as 対象組織コード) t0
41
+ ) t4 inner join (select unnest('{AA,SS,KK}'::text[]) as 内製_対象組織コード) t0
42
42
 
43
- on t0.対象組織コード=any(t4.複数組織コード) or t0.対象組織コード=any(t4.複数組織コード2)
43
+ on t0.内製_対象組織コード=any(t4.複数組織コード) or t0.内製_対象組織コード=any(t4.内製_複数組織コード)
44
44
 
45
- group by t0.対象組織コード
45
+ group by t0.内製_対象組織コード
46
46
 
47
47
  ```
48
48
 

3

追記

2017/08/28 07:01

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -45,3 +45,5 @@
45
45
  group by t0.対象組織コード
46
46
 
47
47
  ```
48
+
49
+ ※前提として、テーブル2に登録のされている会員IDはテーブル1には必ず登録されている、としています。

2

修正

2017/08/28 06:25

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -8,4 +8,40 @@
8
8
 
9
9
 
10
10
 
11
- 訂正中・・・
11
+ ```SQL
12
+
13
+ select
14
+
15
+ t0.対象組織コード, count(distinct t4.会員ID)
16
+
17
+ from (
18
+
19
+ select t1.*, t3.複数組織コード as 複数組織コード2
20
+
21
+ from テーブル1 as t1
22
+
23
+ inner join テーブル2 t2
24
+
25
+ on t1.会員ID=t2.会員ID and アクションフラグ=0
26
+
27
+ left join (
28
+
29
+ select 会員ID, array_agg(distinct 組織コード) as 複数組織コード
30
+
31
+ from テーブル3
32
+
33
+ group by 会員ID
34
+
35
+ ) as t3
36
+
37
+ on t1.会員ID=t3.会員ID
38
+
39
+ where t1.住所 in ('東京')
40
+
41
+ ) t4 inner join (select unnest('{AA,SS,KK}'::text[]) as 対象組織コード) t0
42
+
43
+ on t0.対象組織コード=any(t4.複数組織コード) or t0.対象組織コード=any(t4.複数組織コード2)
44
+
45
+ group by t0.対象組織コード
46
+
47
+ ```

1

修正

2017/08/28 06:22

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -8,38 +8,4 @@
8
8
 
9
9
 
10
10
 
11
- ```SQL
11
+ 訂正中・・・
12
-
13
- select
14
-
15
- t0.対象組織コード, count(distinct t1.会員ID)
16
-
17
- from (select unnest('{AA,SS,KK}'::text[]) as 対象組織コード) as t0
18
-
19
- inner join テーブル1 as t1
20
-
21
- on t0.対象組織コード=any(t1.複数組織コード)
22
-
23
- inner join テーブル2 t2
24
-
25
- on t1.会員ID=t2.会員ID and アクションフラグ=0
26
-
27
- left join (
28
-
29
- select 会員ID, array_agg(distinct 組織コード) as 複数組織コード
30
-
31
- from テーブル3
32
-
33
- group by 会員ID
34
-
35
- ) as t3
36
-
37
- on t1.会員ID=t3.会員ID
38
-
39
- and t0.対象組織コード=any(t3.複数組織コード)
40
-
41
- where t1.住所 in ('東京')
42
-
43
- group by t0.対象組織コード
44
-
45
- ```