回答編集履歴
10
修正
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
修正
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
|
-
|
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
修正
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
サブクエリーを使わずに先に全体表を構成してから、集計する方が記述はシンプルになります。
|
2
|
-
case文中は
|
2
|
+
case文中はgenderとoldの判断は独立しているので、分けてシンプルになるようにしています。
|
3
3
|
※前回の質問では流れからサブクエリーでしたので、混乱するかと思い敢えて提示はしていませんでした。
|
4
4
|
```SQL
|
5
5
|
with param as (
|
7
修正
answer
CHANGED
@@ -3,16 +3,16 @@
|
|
3
3
|
※前回の質問では流れからサブクエリーでしたので、混乱するかと思い敢えて提示はしていませんでした。
|
4
4
|
```SQL
|
5
5
|
with param as (
|
6
|
-
select '2018-02-07':: date
|
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
|
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
|
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
追記
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(
|
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
追記
answer
CHANGED
@@ -32,4 +32,5 @@
|
|
32
32
|
よく考えたら、キャンペーンに応募した人の性別や年代での分布ということだから、ポイント履歴での件数じゃ、不味いんじゃないでしょうか。
|
33
33
|
年齢とかも履歴上で誕生日過ぎたら変わってるとかあるでしょうし。
|
34
34
|
普通に考えるとユーザーマスタからの件数になるかと思われます。
|
35
|
-
敢えて履歴で行うとしても、ユーザーIDでグルーピングしたものの件数で無いと駄目な気が。
|
35
|
+
敢えて履歴で行うとしても、ユーザーIDでグルーピングしたものの件数で無いと駄目な気が。
|
36
|
+
※仕様について考えるのは、また長くなりそうで、本意ではありませんが・・・
|
4
追記
answer
CHANGED
@@ -30,4 +30,6 @@
|
|
30
30
|
追記
|
31
31
|
---
|
32
32
|
よく考えたら、キャンペーンに応募した人の性別や年代での分布ということだから、ポイント履歴での件数じゃ、不味いんじゃないでしょうか。
|
33
|
-
年齢とかも履歴上で誕生日過ぎたら変わってるとかあるでしょうし。
|
33
|
+
年齢とかも履歴上で誕生日過ぎたら変わってるとかあるでしょうし。
|
34
|
+
普通に考えるとユーザーマスタからの件数になるかと思われます。
|
35
|
+
敢えて履歴で行うとしても、ユーザーIDでグルーピングしたものの件数で無いと駄目な気が。
|
3
追記
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
修正
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
修正
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.
|
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
|