回答編集履歴
3
SQL修正
answer
CHANGED
@@ -23,4 +23,21 @@
|
|
23
23
|
group by access_month
|
24
24
|
) b on a.access_month = b.access_month
|
25
25
|
```
|
26
|
-
分析関数を使えばもっとすっきりするかもしれません。
|
26
|
+
分析関数を使えばもっとすっきりするかもしれません。
|
27
|
+
|
28
|
+
---
|
29
|
+
2016/01/21 追記
|
30
|
+
left joinより上の部分をdistinctにして重複ユーザーを除去しました。
|
31
|
+
```SQL
|
32
|
+
select a.access_month, b.newer_count, a.all_count - b.newer_count as repeater_count
|
33
|
+
from (
|
34
|
+
select access_month, count(*) as all_count
|
35
|
+
from (
|
36
|
+
select distinct user_id, substr(access_day, 1, 7) as access_month
|
37
|
+
from access_record
|
38
|
+
where access_type = 101
|
39
|
+
)
|
40
|
+
group by access_month
|
41
|
+
) a
|
42
|
+
以下同じ
|
43
|
+
```
|
2
コメント追加
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
access_dayではなく、月をベースに集計すれば良いと思います。
|
1
|
+
ご質問のSQLのサブクエリーは(access_dayではなく)月を返すようにし、その月をベースに集計すれば良いと思います。
|
2
2
|
- 月ごとの新規ユーザー数
|
3
3
|
- 月ごとの全アクセス数
|
4
4
|
この2つの結果セットを外部結合することで「月ごとの全アクセス数-新規ユーザー数=リピーター数」になると思います。
|
1
誤字の修正
answer
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
access_dayではなく、月をベースに集計すれば良いと思います。
|
2
2
|
- 月ごとの新規ユーザー数
|
3
3
|
- 月ごとの全アクセス数
|
4
|
-
この2つ
|
4
|
+
この2つの結果セットを外部結合することで「月ごとの全アクセス数-新規ユーザー数=リピーター数」になると思います。
|
5
|
+
|
5
6
|
Oracleですがご参考までに。
|
6
7
|
※「substr(access_day, 1, 7)」は「date_format( b.c, '%Y-%m' )」と同義です。
|
7
8
|
```SQL
|