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

質問編集履歴

2

削除したい

2020/03/04 23:36

投稿

binary2
binary2

スコア24

title CHANGED
@@ -1,1 +1,1 @@
1
- データを分類ごとに集計して横持ちにするSQLの書き方
1
+ データを横持ちにするSQL
body CHANGED
@@ -1,69 +1,1 @@
1
- 今sqlで集計する方法を迷っています。
2
- 購買系のテーブルを集計して、月毎のUUユーザーの利用数と1人当たりの平均利用回数を求めたい。
3
-
4
- DBはBQです。
5
-
6
- テーブル情報(event)
7
- ・id(primary):連番 
8
- ・month:利用月 
9
- ・user_id:ユーザーID 
10
- ・category:カテゴリ
11
-
12
- 一つの項目であれば、
13
-
14
- ```sql
15
- WITH
16
-   data AS (
17
-   SELECT
18
-     month,
19
-     COUNT(user_id) AS user_cnt
20
-   FROM
21
-     event
22
-   GROUP BY
23
-     month,
24
-     user_id )
25
-
26
- SELECT
27
-   month,
28
-   COUNT(user_cnt) AS UU,
29
-   AVG(user_cnt) AS uer_avg
30
- FROM
31
-   data
32
- GROUP BY
33
-   month
34
- ```
35
-
36
- これを、category(pc,sp,app)の3種類でUUに分けて、横持ちにしたい場合
37
-
38
- ```sql
39
- WITH
40
- data AS (
41
- SELECT
42
- month,
43
- COUNT(CASE WHEN category="pc" THEN 1 ELSE NULL END) AS user_pc_cnt,
44
- COUNT(CASE WHEN category="sp" THEN 1 ELSE NULL END) AS user_sp_cnt,
45
- COUNT(CASE WHEN category="app" THEN 1 ELSE NULL END) AS user_app_cnt,
46
- FROM
47
- event
48
- GROUP BY
49
- month,
50
- category,
51
- user_id )
52
-
53
- SELECT
54
- month,
55
- COUNT(CASE WHEN user_pc_cnt > 0 THEN 1 ELSE NULL END) AS pc_UU,
56
- coalesce( AVG(CASE WHEN user_pc_cnt > 0 THEN user_pc_cnt ELSE NULL END),0) AS user_pc_avg,
57
- COUNT(CASE WHEN user_sp_cnt > 0 THEN 1 ELSE NULL END) AS sp_UU,
58
- coalesce( AVG(CASE WHEN user_sp_cnt > 0 THEN user_sp_cnt ELSE NULL END),0) AS user_sp_avg,
59
- COUNT(CASE WHEN user_app_cnt > 0 THEN 1 ELSE NULL END) AS app_UU,
60
- coalesce( AVG(CASE WHEN user_app_cnt > 0 THEN user_app_cnt ELSE NULL END),0) AS user_app_avg,
61
- FROM
62
- data
63
- GROUP BY
64
- month
65
- ```
66
-
67
- となる。
68
- 値はあっているのですが、case文を2回使くどい。。
1
+ SQLデータを横持ちにる場合はcase文を乱用してるが他に方法はあるのか?
69
- もっとうまい書き方ありますかね?

1

DB種類について

2020/03/04 23:36

投稿

binary2
binary2

スコア24

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,8 @@
1
1
  今sqlで集計する方法を迷っています。
2
2
  購買系のテーブルを集計して、月毎のUUユーザーの利用数と1人当たりの平均利用回数を求めたい。
3
3
 
4
+ DBはBQです。
5
+
4
6
  テーブル情報(event)
5
7
  ・id(primary):連番 
6
8
  ・month:利用月