回答編集履歴

11

変更

2017/08/25 15:32

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  SELECT ORG, COUNT(DISTINCT T1.会員ID) FROM
48
48
 
49
- (SELECT DISTINCT ORG, 会員ID FROM
49
+ (SELECT ORG, 会員ID FROM
50
50
 
51
51
  (SELECT 会員ID, UNNEST(t4.組織コード) ORG
52
52
 

10

変更

2017/08/25 15:32

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -1,4 +1,4 @@
1
- 頂いた例に変更しました。 配列版で複数
1
+ サブクエリの件数絞る様に変更しました。
2
2
 
3
3
  ```sql
4
4
 
@@ -48,17 +48,27 @@
48
48
 
49
49
  (SELECT DISTINCT ORG, 会員ID FROM
50
50
 
51
- (SELECT 会員ID, UNNEST(テーブル1.組織コード) ORG FROM テーブル1
51
+ (SELECT 会員ID, UNNEST(t4.組織コード) ORG
52
52
 
53
+ FROM (SELECT t5.* FROM テーブル1 t5
54
+
55
+ JOIN テーブル2 t2 ON t5.会員ID=t2.会員ID AND t2.アクションフラグ='1'
56
+
53
- WHERE 住所 IN('東京','千葉')) t0
57
+ WHERE 住所 IN ('東京','千葉')
58
+
59
+ ) t4
60
+
61
+ ) t0 WHERE ORG IN ('SS','PP','QQ','CC')
54
62
 
55
63
  UNION
56
64
 
57
- SELECT 組織コード, 会員ID FROM テーブル3 WHERE 組織コード = 'SS'
65
+ SELECT 組織コード, t6.会員ID FROM テーブル3 t6
66
+
67
+ JOIN テーブル2 t2 ON t6.会員ID=t2.会員ID AND t2.アクションフラグ='1'
68
+
69
+ WHERE 組織コード='SS'
58
70
 
59
71
  ) t1
60
-
61
- JOIN テーブル2 t2 ON t1.会員ID=t2.会員ID AND t2.アクションフラグ = '1'
62
72
 
63
73
  GROUP BY 1;
64
74
 

9

変更

2017/08/25 12:23

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -6,13 +6,13 @@
6
6
 
7
7
  insert into テーブル1 values
8
8
 
9
- (1,'東京','{SS,PP}'),
9
+ (1,'東京','{SS,PP,QQ,RR,TT,JJ}'),
10
10
 
11
- (2,'神奈川','{SR}'),
11
+ (2,'神奈川','{SR,LL,MM,KK,PP}'),
12
12
 
13
- (3,'千葉','{SS}'),
13
+ (3,'千葉','{SS,PP,CC,ZZ}'),
14
14
 
15
- (4,'東京','{NO}');
15
+ (4,'東京','{NO,PO,WO,HO}');
16
16
 
17
17
 
18
18
 
@@ -30,46 +30,36 @@
30
30
 
31
31
 
32
32
 
33
- create temp table テーブル3 (会員ID int,組織コード text[]);
33
+ create temp table テーブル3 (会員ID int,組織コード text);
34
34
 
35
35
  insert into テーブル3 values
36
36
 
37
- (1,'{SS}'),
37
+ (1,'SS'),
38
38
 
39
- (1,'{SS}'),
39
+ (1,'SS'),
40
40
 
41
- (2,'{SS}'),
41
+ (2,'SS'),
42
42
 
43
- (4,'{KK}');
43
+ (4,'KK');
44
44
 
45
45
 
46
46
 
47
- select count(distinct 会員) from
47
+ SELECT ORG, COUNT(DISTINCT T1.会員ID) FROM
48
48
 
49
- (select case when 'SS' = any(組織コード) or 'KK' = any(組織コード) then 会員ID else null end 会員 from テーブル1
49
+ (SELECT DISTINCT ORG, 会員ID FROM
50
50
 
51
- union
51
+ (SELECT 会員ID, UNNEST(テーブル1.組織コード) ORG FROM テーブル1
52
52
 
53
- select case when 'SS' = any(組織コード) or 'KK' = any(組織コード) then 会員ID else null end 会員 from テーブル3
53
+ WHERE 住所 IN('東京','千葉')) t0
54
54
 
55
+ UNION
56
+
57
+ SELECT 組織コード, 会員ID FROM テーブル3 WHERE 組織コード = 'SS'
58
+
55
- ) t1;
59
+ ) t1
60
+
61
+ JOIN テーブル2 t2 ON t1.会員ID=t2.会員ID AND t2.アクションフラグ = '1'
62
+
63
+ GROUP BY 1;
56
64
 
57
65
  ```
58
-
59
-
60
-
61
- 頂いた例を元に変更しました。 
62
-
63
- ```sql
64
-
65
- select count(distinct 会員) from
66
-
67
- (select case when 'SS' = any(string_to_array(組織コード,',')) then 会員ID else null end 会員 from テーブル1
68
-
69
- union
70
-
71
- select case when 'SS' = any(string_to_array(組織コード,',')) then 会員ID else null end 会員 from テーブル3
72
-
73
- ) t1;
74
-
75
- ```

8

追加

2017/08/25 09:18

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -1,6 +1,48 @@
1
1
  頂いた例を元に変更しました。 配列版で複数
2
2
 
3
3
  ```sql
4
+
5
+ create temp table テーブル1 (会員ID int,住所 text, 組織コード text[]);
6
+
7
+ insert into テーブル1 values
8
+
9
+ (1,'東京','{SS,PP}'),
10
+
11
+ (2,'神奈川','{SR}'),
12
+
13
+ (3,'千葉','{SS}'),
14
+
15
+ (4,'東京','{NO}');
16
+
17
+
18
+
19
+ create temp table テーブル2 (会員ID int,アクションフラグ int);
20
+
21
+ insert into テーブル2 values
22
+
23
+ (1,0),
24
+
25
+ (1,0),
26
+
27
+ (3,1),
28
+
29
+ (4,0);
30
+
31
+
32
+
33
+ create temp table テーブル3 (会員ID int,組織コード text[]);
34
+
35
+ insert into テーブル3 values
36
+
37
+ (1,'{SS}'),
38
+
39
+ (1,'{SS}'),
40
+
41
+ (2,'{SS}'),
42
+
43
+ (4,'{KK}');
44
+
45
+
4
46
 
5
47
  select count(distinct 会員) from
6
48
 

7

変更

2017/08/25 03:50

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -1,4 +1,22 @@
1
+ 頂いた例を元に変更しました。 配列版で複数
2
+
3
+ ```sql
4
+
5
+ select count(distinct 会員) from
6
+
7
+ (select case when 'SS' = any(組織コード) or 'KK' = any(組織コード) then 会員ID else null end 会員 from テーブル1
8
+
9
+ union
10
+
11
+ select case when 'SS' = any(組織コード) or 'KK' = any(組織コード) then 会員ID else null end 会員 from テーブル3
12
+
13
+ ) t1;
14
+
15
+ ```
16
+
17
+
18
+
1
- 頂いた例を元に変更しました。 変更版
19
+ 頂いた例を元に変更しました。 
2
20
 
3
21
  ```sql
4
22
 

6

改変

2017/08/25 03:42

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -1,59 +1,15 @@
1
- 頂いた例を元に変更しました。
1
+ 頂いた例を元に変更しました。 変更版
2
-
3
-
4
2
 
5
3
  ```sql
6
4
 
7
- 会員id | 住所 | 組織コード
5
+ select count(distinct 会員) from
8
6
 
9
- --------+--------+------------
7
+ (select case when 'SS' = any(string_to_array(組織コード,',')) then 会員ID else null end 会員 from テーブル1
10
8
 
11
- 1 | 東京 | SS
9
+ union
12
10
 
13
- 2 | 神奈川 | SR
11
+ select case when 'SS' = any(string_to_array(組織コード,',')) then 会員ID else null end 会員 from テーブル3
14
12
 
15
- 3 | 千葉 | SS
16
-
17
- 4 | 東京 | NO
18
-
19
- (4 rows)
20
-
21
- 会員id | アクションフラグ
22
-
23
- --------+------------------
24
-
25
- 1 | 0
26
-
27
- 1 | 0
28
-
29
- 3 | 1
30
-
31
- 4 | 0
32
-
33
- (4 rows)
34
-
35
- 会員id | 組織コード
36
-
37
- --------+------------
38
-
39
- 1 | SS
13
+ ) t1;
40
-
41
- 1 | SS
42
-
43
- 2 | SS
44
-
45
- 4 | KK
46
-
47
- (4 rows)
48
-
49
- テーブル2が使えませんでしたが
50
-
51
- select count (会員ID) from
52
-
53
- (select 会員ID from テーブル1 where 組織コード='SS'
54
-
55
- union
56
-
57
- select 会員ID from テーブル3 where 組織コード='SS') t1;
58
14
 
59
15
  ```

5

変更

2017/08/25 03:28

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -1,40 +1,4 @@
1
- テーブルレイアウトが有れば良のですが、エラーとならない様に変更してみました。
1
+ た例を元に変更しました。
2
-
3
-
4
-
5
- ```sql
6
-
7
- SELECT COUNT(DISTINCT テーブル1.会員ID),
8
-
9
- CASE WHEN '組織コード' = ANY(テーブル1.組織名) THEN '組織名' ELSE 'その他' END as ORGANIZATION
10
-
11
- FROM テーブル1
12
-
13
- INNER JOIN テーブル2 ON テーブル1.会員ID = テーブル2.会員ID
14
-
15
- INNER JOIN テーブル3 ON テーブル2.会員ID = テーブル3.会員ID
16
-
17
- GROUP BY 2
18
-
19
- ;
20
-
21
-
22
-
23
- -- ここにテーブル3の特定の組織コードを持つ人も足してカウントしたい場合
24
-
25
- SELECT COUNT(DISTINCT テーブル1.会員ID)
26
-
27
- CASE WHEN '組織コード' = ANY(テーブル1.組織名) OR '特定組織コード' = ANY(テーブル3.組織名) THEN '組織名' ELSE 'その他' END as ORGANIZATION
28
-
29
- FROM テーブル1
30
-
31
- INNER JOIN テーブル2 ON テーブル1.会員ID = テーブル2.会員ID
32
-
33
- INNER JOIN テーブル3 ON テーブル2.会員ID = テーブル3.会員ID
34
-
35
- GROUP BY 2
36
-
37
- ```
38
2
 
39
3
 
40
4
 

4

変更

2017/08/24 12:56

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
File without changes

3

変更

2017/08/24 12:50

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -35,3 +35,61 @@
35
35
  GROUP BY 2
36
36
 
37
37
  ```
38
+
39
+
40
+
41
+ ```sql
42
+
43
+ 会員id | 住所 | 組織コード
44
+
45
+ --------+--------+------------
46
+
47
+ 1 | 東京 | SS
48
+
49
+ 2 | 神奈川 | SR
50
+
51
+ 3 | 千葉 | SS
52
+
53
+ 4 | 東京 | NO
54
+
55
+ (4 rows)
56
+
57
+ 会員id | アクションフラグ
58
+
59
+ --------+------------------
60
+
61
+ 1 | 0
62
+
63
+ 1 | 0
64
+
65
+ 3 | 1
66
+
67
+ 4 | 0
68
+
69
+ (4 rows)
70
+
71
+ 会員id | 組織コード
72
+
73
+ --------+------------
74
+
75
+ 1 | SS
76
+
77
+ 1 | SS
78
+
79
+ 2 | SS
80
+
81
+ 4 | KK
82
+
83
+ (4 rows)
84
+
85
+ テーブル2が使えませんでしたが
86
+
87
+ select count (会員ID) from
88
+
89
+ (select 会員ID from テーブル1 where 組織コード='SS'
90
+
91
+ union
92
+
93
+ select 会員ID from テーブル3 where 組織コード='SS') t1;
94
+
95
+ ```

2

変更

2017/08/24 12:50

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  SELECT COUNT(DISTINCT テーブル1.会員ID),
8
8
 
9
- (CASE WHEN '組織コード' = ANY(テーブル1.組織名) THEN '組織名' ELSE 'その他' END) as ORGANIZATION
9
+ CASE WHEN '組織コード' = ANY(テーブル1.組織名) THEN '組織名' ELSE 'その他' END as ORGANIZATION
10
10
 
11
11
  FROM テーブル1
12
12
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  SELECT COUNT(DISTINCT テーブル1.会員ID)
26
26
 
27
- (CASE WHEN '組織コード' = ANY(テーブル1.組織名) OR '特定組織コード' = ANY(テーブル3.組織名) THEN '組織名' ELSE 'その他' END) as ORGANIZATION
27
+ CASE WHEN '組織コード' = ANY(テーブル1.組織名) OR '特定組織コード' = ANY(テーブル3.組織名) THEN '組織名' ELSE 'その他' END as ORGANIZATION
28
28
 
29
29
  FROM テーブル1
30
30
 

1

変更

2017/08/23 23:42

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -20,15 +20,17 @@
20
20
 
21
21
 
22
22
 
23
- SELECT COUNT(DISTINCT テーブル1.会員ID)+COUNT(DISTINCT テブル3.会員ID),
23
+ -- ここにテーブル3の特定の組織コドを持つ人も足してカウントしたい場合
24
24
 
25
+ SELECT COUNT(DISTINCT テーブル1.会員ID)
26
+
25
- (CASE WHEN '組織コード' = ANY(テーブル1.組織名) OR '組織コード' = ANY(テーブル3.組織名) THEN '組織名' ELSE 'その他' END) as ORGANIZATION
27
+ (CASE WHEN '組織コード' = ANY(テーブル1.組織名) OR '特定組織コード' = ANY(テーブル3.組織名) THEN '組織名' ELSE 'その他' END) as ORGANIZATION
26
28
 
27
29
  FROM テーブル1
28
30
 
29
- LEFT JOIN テーブル2 ON テーブル1.会員ID = テーブル2.会員ID
31
+ INNER JOIN テーブル2 ON テーブル1.会員ID = テーブル2.会員ID
30
32
 
31
- LEFT JOIN テーブル3 ON テーブル2.会員ID = テーブル3.会員ID
33
+ INNER JOIN テーブル3 ON テーブル2.会員ID = テーブル3.会員ID
32
34
 
33
35
  GROUP BY 2
34
36