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

回答編集履歴

10

修正

2018/03/19 00:50

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  サブクエリーを使わずに先に全体表を構成してから、集計する方が記述はシンプルになります。
2
2
  case文中はgenderとoldの判断は独立しているので、分けてシンプルになるようにしています。
3
+ また、paramを駆動表として結合するように変更しています。
3
4
  ※前回の質問では流れからサブクエリーでしたので、混乱するかと思い敢えて提示はしていませんでした。
4
- ※paramを駆動表として結合するように変更しています。
5
5
  ```SQL
6
6
  with param as (
7
7
  select '2018-02-07':: date apply_date_limit ,'2018-01-26':: date campaign_Start,'2018-02-09':: date campaign_End

9

修正

2018/03/19 00:50

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,6 +1,7 @@
1
1
  サブクエリーを使わずに先に全体表を構成してから、集計する方が記述はシンプルになります。
2
2
  case文中はgenderとoldの判断は独立しているので、分けてシンプルになるようにしています。
3
3
  ※前回の質問では流れからサブクエリーでしたので、混乱するかと思い敢えて提示はしていませんでした。
4
+ ※paramを駆動表として結合するように変更しています。
4
5
  ```SQL
5
6
  with param as (
6
7
  select '2018-02-07':: date apply_date_limit ,'2018-01-26':: date campaign_Start,'2018-02-09':: date campaign_End
@@ -17,10 +18,10 @@
17
18
  when old between 35 and 49 then '2'
18
19
  when old >= 50 then '3'
19
20
  end as demogra_flg
21
+ from param left join campaign cmpgn
22
+ on cmpgn.apply_date < param.apply_date_limit
20
- from campaign cmpgn left join point_rireki2 pnt
23
+ left join point_rireki2 pnt
21
24
  on cmpgn.kihon_id=pnt.kihon_id
22
- cross join param
23
- where cmpgn.apply_date < param.apply_date_limit
24
25
  ) step1
25
26
  group by shisaku_id, shisaku_name,shohi_flg,demogra_flg
26
27
  order by shisaku_id,shohi_flg,demogra_flg

8

修正

2018/03/19 00:49

投稿

sazi
sazi

スコア25430

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

7

修正

2018/03/19 00:44

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -3,16 +3,16 @@
3
3
  ※前回の質問では流れからサブクエリーでしたので、混乱するかと思い敢えて提示はしていませんでした。
4
4
  ```SQL
5
5
  with param as (
6
- select '2018-02-07':: date oubo_date_limit ,'2018-01-26':: date campaign_Start,'2018-02-09':: date campaign_End
6
+ select '2018-02-07':: date apply_date_limit ,'2018-01-26':: date campaign_Start,'2018-02-09':: date campaign_End
7
7
  )
8
8
  select shisaku_id, shisaku_name, shohi_flg,demogra_flg, count(distinct kihon_id) as patarn_count
9
9
  from (
10
10
  select cmpgn.shisaku_id, cmpgn.shisaku_name, cmpgn.kihon_id
11
- , case when "date" between param.campaign_Start and param.campaign_End
11
+ , case when p_date between param.campaign_Start and param.campaign_End
12
12
  and (fuyo_pt_tj is not null or kan_pt_tj is not null or kan_pt_kg is not null)
13
13
  then '消費' else '消費なし'
14
14
  end as shohi_flg
15
- , case sex when 1 then 'M' when 2 then 'F' end ||
15
+ , case gender when 1 then 'M' when 2 then 'F' end ||
16
16
  case when old between 20 and 34 then '1'
17
17
  when old between 35 and 49 then '2'
18
18
  when old >= 50 then '3'

6

追記

2018/03/19 00:42

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -5,9 +5,9 @@
5
5
  with param as (
6
6
  select '2018-02-07':: date oubo_date_limit ,'2018-01-26':: date campaign_Start,'2018-02-09':: date campaign_End
7
7
  )
8
- select shisaku_id, shisaku_name, shohi_flg,demogra_flg, count(*) as patarn_count
8
+ select shisaku_id, shisaku_name, shohi_flg,demogra_flg, count(distinct kihon_id) as patarn_count
9
9
  from (
10
- select *
10
+ select cmpgn.shisaku_id, cmpgn.shisaku_name, cmpgn.kihon_id
11
11
  , case when "date" between param.campaign_Start and param.campaign_End
12
12
  and (fuyo_pt_tj is not null or kan_pt_tj is not null or kan_pt_kg is not null)
13
13
  then '消費' else '消費なし'
@@ -33,4 +33,5 @@
33
33
  年齢とかも履歴上で誕生日過ぎたら変わってるとかあるでしょうし。
34
34
  普通に考えるとユーザーマスタからの件数になるかと思われます。
35
35
  敢えて履歴で行うとしても、ユーザーIDでグルーピングしたものの件数で無いと駄目な気が。
36
+ 取り敢えずは、重複なしのユーザーIDでカウントするようにしました。
36
37
  ※仕様について考えるのは、また長くなりそうで、本意ではありませんが・・・

5

追記

2018/03/19 00:35

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -32,4 +32,5 @@
32
32
  よく考えたら、キャンペーンに応募した人の性別や年代での分布ということだから、ポイント履歴での件数じゃ、不味いんじゃないでしょうか。
33
33
  年齢とかも履歴上で誕生日過ぎたら変わってるとかあるでしょうし。
34
34
  普通に考えるとユーザーマスタからの件数になるかと思われます。
35
- 敢えて履歴で行うとしても、ユーザーIDでグルーピングしたものの件数で無いと駄目な気が。
35
+ 敢えて履歴で行うとしても、ユーザーIDでグルーピングしたものの件数で無いと駄目な気が。
36
+ ※仕様について考えるのは、また長くなりそうで、本意ではありませんが・・・

4

追記

2018/03/18 17:24

投稿

sazi
sazi

スコア25430

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

3

追記

2018/03/18 17:23

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -25,4 +25,9 @@
25
25
  group by shisaku_id, shisaku_name,shohi_flg,demogra_flg
26
26
  order by shisaku_id,shohi_flg,demogra_flg
27
27
  ```
28
- 尚、データ状況によってはサブクエリーの方が高速な場合もあります。
28
+ 尚、データ状況によってはサブクエリーの方が高速な場合もあります。
29
+
30
+ 追記
31
+ ---
32
+ よく考えたら、キャンペーンに応募した人の性別や年代での分布ということだから、ポイント履歴での件数じゃ、不味いんじゃないでしょうか。
33
+ 年齢とかも履歴上で誕生日過ぎたら変わってるとかあるでしょうし。

2

修正

2018/03/18 17:18

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -23,6 +23,6 @@
23
23
  where cmpgn.apply_date < param.apply_date_limit
24
24
  ) step1
25
25
  group by shisaku_id, shisaku_name,shohi_flg,demogra_flg
26
- order by shisaku_id,shohi_flg
26
+ order by shisaku_id,shohi_flg,demogra_flg
27
27
  ```
28
28
  尚、データ状況によってはサブクエリーの方が高速な場合もあります。

1

修正

2018/03/18 11:05

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -20,7 +20,7 @@
20
20
  from campaign cmpgn left join point_rireki2 pnt
21
21
  on cmpgn.kihon_id=pnt.kihon_id
22
22
  cross join param
23
- where cmpgn.apply_date < param.oubo_date_limit
23
+ where cmpgn.apply_date < param.apply_date_limit
24
24
  ) step1
25
25
  group by shisaku_id, shisaku_name,shohi_flg,demogra_flg
26
26
  order by shisaku_id,shohi_flg