teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

8

修正

2017/08/28 08:26

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -29,8 +29,7 @@
29
29
 
30
30
  追記
31
31
  ---
32
- 焦っておられるのかもしれませんが、回答でのポイントを理解して頂いているとは思えないので、
32
+ 焦っておられるのかもしれませんが、回答でのポイントを理解して頂いているとは思えないので、纏めておきます。
33
- 纏めておきます。
34
33
 
35
34
  質問では、抽出条件の対象となるテーブルやカラムの型が相違することによって、抽出条件をどのようにすれば良いか分からないというところがポイントだったと思います。
36
35
 

7

追記

2017/08/28 08:26

投稿

sazi
sazi

スコア25430

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

改修

2017/08/28 08:25

投稿

sazi
sazi

スコア25430

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

追記

2017/08/28 08:06

投稿

sazi
sazi

スコア25430

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
- ※前提として、テーブル2に登録されている会員IDはテーブル1には必ず登録されている、としています。
26
+ テーブル2およびテーブル3に登録されている会員IDはテーブル1には必ず登録されている
27
+ ・テーブル2は会員IDにより一意である。
28
+ としています。

4

修正

2017/08/28 07:14

投稿

sazi
sazi

スコア25430

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.複数組織コード as 複数組織コード2
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.複数組織コード2)
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

追記

2017/08/28 07:01

投稿

sazi
sazi

スコア25430

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

修正

2017/08/28 06:25

投稿

sazi
sazi

スコア25430

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

修正

2017/08/28 06:22

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -3,21 +3,4 @@
3
3
  テーブル2の組織コードの持ち方をテーブル1と同様に整形し、同様の結合になるようにしています。
4
4
  データ状況によっては負荷が高いかもしれません。
5
5
 
6
- ```SQL
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
- ```