回答編集履歴

3

SQL修正

2016/01/21 03:44

投稿

jcs502ulf
jcs502ulf

スコア307

test CHANGED
@@ -49,3 +49,37 @@
49
49
  ```
50
50
 
51
51
  分析関数を使えばもっとすっきりするかもしれません。
52
+
53
+
54
+
55
+ ---
56
+
57
+ 2016/01/21 追記
58
+
59
+ left joinより上の部分をdistinctにして重複ユーザーを除去しました。
60
+
61
+ ```SQL
62
+
63
+ select a.access_month, b.newer_count, a.all_count - b.newer_count as repeater_count
64
+
65
+ from (
66
+
67
+ select access_month, count(*) as all_count
68
+
69
+ from (
70
+
71
+ select distinct user_id, substr(access_day, 1, 7) as access_month
72
+
73
+ from access_record
74
+
75
+ where access_type = 101
76
+
77
+ )
78
+
79
+ group by access_month
80
+
81
+ ) a
82
+
83
+ 以下同じ
84
+
85
+ ```

2

コメント追加

2016/01/21 03:44

投稿

jcs502ulf
jcs502ulf

スコア307

test CHANGED
@@ -1,4 +1,4 @@
1
- access_dayではなく、月をベースに集計すれば良いと思います。
1
+ ご質問のSQLのサブクエリーは(access_dayではなく)月を返すようにしその月をベースに集計すれば良いと思います。
2
2
 
3
3
  - 月ごとの新規ユーザー数
4
4
 

1

誤字の修正

2016/01/15 07:04

投稿

jcs502ulf
jcs502ulf

スコア307

test CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
  - 月ごとの全アクセス数
6
6
 
7
- この2つ結果セットを外部結合することで「月ごとの全アクセス数-新規ユーザー数=リピーター数」になると思います。
7
+ この2つ結果セットを外部結合することで「月ごとの全アクセス数-新規ユーザー数=リピーター数」になると思います。
8
+
9
+
8
10
 
9
11
  Oracleですがご参考までに。
10
12