回答編集履歴

10

修正

2018/03/19 00:50

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  case文中はgenderとoldの判断は独立しているので、分けてシンプルになるようにしています。
4
4
 
5
+ また、paramを駆動表として結合するように変更しています。
6
+
5
7
  ※前回の質問では流れからサブクエリーでしたので、混乱するかと思い敢えて提示はしていませんでした。
6
-
7
- ※paramを駆動表として結合するように変更しています。
8
8
 
9
9
  ```SQL
10
10
 

9

修正

2018/03/19 00:50

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -3,6 +3,8 @@
3
3
  case文中はgenderとoldの判断は独立しているので、分けてシンプルになるようにしています。
4
4
 
5
5
  ※前回の質問では流れからサブクエリーでしたので、混乱するかと思い敢えて提示はしていませんでした。
6
+
7
+ ※paramを駆動表として結合するように変更しています。
6
8
 
7
9
  ```SQL
8
10
 
@@ -36,13 +38,13 @@
36
38
 
37
39
  end as demogra_flg
38
40
 
41
+ from param left join campaign cmpgn
42
+
43
+ on cmpgn.apply_date < param.apply_date_limit
44
+
39
- from campaign cmpgn left join point_rireki2 pnt
45
+ left join point_rireki2 pnt
40
46
 
41
47
  on cmpgn.kihon_id=pnt.kihon_id
42
-
43
- cross join param
44
-
45
- where cmpgn.apply_date < param.apply_date_limit
46
48
 
47
49
  ) step1
48
50
 

8

修正

2018/03/19 00:49

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -1,6 +1,6 @@
1
1
  サブクエリーを使わずに先に全体表を構成してから、集計する方が記述はシンプルになります。
2
2
 
3
- case文中はsexとoldの判断は独立しているので、分けてシンプルになるようにしています。
3
+ case文中はgenderとoldの判断は独立しているので、分けてシンプルになるようにしています。
4
4
 
5
5
  ※前回の質問では流れからサブクエリーでしたので、混乱するかと思い敢えて提示はしていませんでした。
6
6
 

7

修正

2018/03/19 00:44

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  with param as (
10
10
 
11
- select '2018-02-07':: date oubo_date_limit ,'2018-01-26':: date campaign_Start,'2018-02-09':: date campaign_End
11
+ select '2018-02-07':: date apply_date_limit ,'2018-01-26':: date campaign_Start,'2018-02-09':: date campaign_End
12
12
 
13
13
  )
14
14
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  select cmpgn.shisaku_id, cmpgn.shisaku_name, cmpgn.kihon_id
20
20
 
21
- , case when "date" between param.campaign_Start and param.campaign_End
21
+ , case when p_date between param.campaign_Start and param.campaign_End
22
22
 
23
23
  and (fuyo_pt_tj is not null or kan_pt_tj is not null or kan_pt_kg is not null)
24
24
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  end as shohi_flg
28
28
 
29
- , case sex when 1 then 'M' when 2 then 'F' end ||
29
+ , case gender when 1 then 'M' when 2 then 'F' end ||
30
30
 
31
31
  case when old between 20 and 34 then '1'
32
32
 

6

追記

2018/03/19 00:42

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -12,11 +12,11 @@
12
12
 
13
13
  )
14
14
 
15
- select shisaku_id, shisaku_name, shohi_flg,demogra_flg, count(*) as patarn_count
15
+ select shisaku_id, shisaku_name, shohi_flg,demogra_flg, count(distinct kihon_id) as patarn_count
16
16
 
17
17
  from (
18
18
 
19
- select *
19
+ select cmpgn.shisaku_id, cmpgn.shisaku_name, cmpgn.kihon_id
20
20
 
21
21
  , case when "date" between param.campaign_Start and param.campaign_End
22
22
 
@@ -68,4 +68,6 @@
68
68
 
69
69
  敢えて履歴で行うとしても、ユーザーIDでグルーピングしたものの件数で無いと駄目な気が。
70
70
 
71
+ 取り敢えずは、重複なしのユーザーIDでカウントするようにしました。
72
+
71
73
  ※仕様について考えるのは、また長くなりそうで、本意ではありませんが・・・

5

追記

2018/03/19 00:35

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -67,3 +67,5 @@
67
67
  普通に考えるとユーザーマスタからの件数になるかと思われます。
68
68
 
69
69
  敢えて履歴で行うとしても、ユーザーIDでグルーピングしたものの件数で無いと駄目な気が。
70
+
71
+ ※仕様について考えるのは、また長くなりそうで、本意ではありませんが・・・

4

追記

2018/03/18 17:24

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -63,3 +63,7 @@
63
63
  よく考えたら、キャンペーンに応募した人の性別や年代での分布ということだから、ポイント履歴での件数じゃ、不味いんじゃないでしょうか。
64
64
 
65
65
  年齢とかも履歴上で誕生日過ぎたら変わってるとかあるでしょうし。
66
+
67
+ 普通に考えるとユーザーマスタからの件数になるかと思われます。
68
+
69
+ 敢えて履歴で行うとしても、ユーザーIDでグルーピングしたものの件数で無いと駄目な気が。

3

追記

2018/03/18 17:23

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -53,3 +53,13 @@
53
53
  ```
54
54
 
55
55
  尚、データ状況によってはサブクエリーの方が高速な場合もあります。
56
+
57
+
58
+
59
+ 追記
60
+
61
+ ---
62
+
63
+ よく考えたら、キャンペーンに応募した人の性別や年代での分布ということだから、ポイント履歴での件数じゃ、不味いんじゃないでしょうか。
64
+
65
+ 年齢とかも履歴上で誕生日過ぎたら変わってるとかあるでしょうし。

2

修正

2018/03/18 17:18

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
  group by shisaku_id, shisaku_name,shohi_flg,demogra_flg
50
50
 
51
- order by shisaku_id,shohi_flg
51
+ order by shisaku_id,shohi_flg,demogra_flg
52
52
 
53
53
  ```
54
54
 

1

修正

2018/03/18 11:05

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  cross join param
44
44
 
45
- where cmpgn.apply_date < param.oubo_date_limit
45
+ where cmpgn.apply_date < param.apply_date_limit
46
46
 
47
47
  ) step1
48
48