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

質問編集履歴

3

viewの作成に関する内容を変更しました。

2016/05/14 20:37

投稿

qopllqopllqop
qopllqopllqop

スコア36

title CHANGED
File without changes
body CHANGED
@@ -48,9 +48,17 @@
48
48
 
49
49
  VIEWの作成
50
50
  ```SQL
51
+ DROP VIEW vw_conversion;
51
- CREATE VIEW conversion_data_id AS
52
+ CREATE VIEW vw_conversion AS
52
- SELECT conversion_data
53
+ SELECT conversion_date
53
54
  FROM t_conversion
54
- WHERE user_id=001;
55
+ WHERE user_id = 001;
56
+ SELECT ADDDATE( '2016-05-01', V.Number ) AS DATE, IFNULL( COUNT( C.conversion_date ) , 0 ) AS conversion
57
+ FROM vw_sequence99 AS V
58
+ LEFT JOIN vw_conversion AS C
59
+ ON ADDDATE( '2016-05-01', V.Number ) = DATE( C.conversion_date )
60
+ WHERE ADDDATE('2016-05-01', V.Number) BETWEEN '2016-05-01' AND '2016-05-31'
61
+ GROUP BY ADDDATE('2016-05-01', V.Number)
55
62
  ```
56
- してかcount(conversion_data)した方よいのでしょう
63
+ すれば期待通りの結果が得れるのです、viewを使用すべきなか、WHERE句同じことができるの
64
+ ?疑問です。

2

t_conversionのテーブルの表記にuser_idを追記しました。

2016/05/14 20:37

投稿

qopllqopllqop
qopllqopllqop

スコア36

title CHANGED
File without changes
body CHANGED
@@ -22,14 +22,14 @@
22
22
  99
23
23
 
24
24
  t_conversion
25
- +-----------------+
25
+ +-------+-----------------+
26
- | conversion_date |
26
+ |user_id| conversion_date |
27
- +-----------------+
27
+ +-------+-----------------+
28
- |2016-05-01
28
+ |001 |2016-05-01
29
- |2016-05-01
29
+ |002 |2016-05-01
30
- |2016-05-03
30
+ |002 |2016-05-03
31
31
  ~
32
- |2016-05-31
32
+ |001 |2016-05-31
33
33
 
34
34
  ```SQL
35
35
  SELECT ADDDATE('2016-05-01',V.Number ) AS DATE, IFNULL(COUNT(C.conversion_date),0) AS conversion

1

さらに詳しい内容を追記いたしました。

2016/05/14 19:46

投稿

qopllqopllqop
qopllqopllqop

スコア36

title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,56 @@
1
1
  ###実現したいこと
2
- テーブルのデータを一旦ユーザーIDで絞り込み、日付テーブルにLEFT JOINし、結合したデータを期間を指定して絞り込みたいと考えています。
2
+ t_conversionのデータを一旦ユーザーIDで絞り込み、作成した1〜31日までの日付テーブルにLEFT JOINし、結合したデータを期間をさらに指定して絞り込みたいと考えています。
3
3
 
4
- 1つのSQLで実行しようとするとき、2回発生する絞り込みでWHERE句をどのように書けば良いのかわかりません。
4
+ 1つのSQLで実行しようとするとき、ユーザーIDの絞り込みと期間の絞り込みが2回発生しまが、WHERE句をどのように書けば良いのかわかりません。
5
- VIEWを使って、あらかじめユーザーIDを絞り込んだテーブルを作ってからLEFT JOINさせる方が良いのか?
5
+ VIEWを使って、あらかじめユーザーIDを絞り込んだテーブルを作ってからLEFT JOINさせる方が良いのでしょうか?
6
- 1つのSQL内でWHERE句を上手に書く書く方法はあるのか?
6
+ もしくは1つのSQL内でWHERE句を上手に書く書く方法はあるのでしょうか?
7
7
 
8
8
  どちらの方向が良いのかご教授いただければ幸いです。
9
- よろしくお願いいたします。
9
+ よろしくお願いいたします。
10
+
11
+ ###該当のソースコード
12
+ vw_sequence99
13
+ +-------+
14
+ | Number |
15
+ +-------+
16
+ 0
17
+ 1
18
+ 2
19
+ 3
20
+ 4
21
+ ~
22
+ 99
23
+
24
+ t_conversion
25
+ +-----------------+
26
+ | conversion_date |
27
+ +-----------------+
28
+ |2016-05-01
29
+ |2016-05-01
30
+ |2016-05-03
31
+ ~
32
+ |2016-05-31
33
+
34
+ ```SQL
35
+ SELECT ADDDATE('2016-05-01',V.Number ) AS DATE, IFNULL(COUNT(C.conversion_date),0) AS conversion
36
+ FROM vw_sequence99 AS V
37
+ LEFT JOIN t_conversion AS C
38
+ ON ADDDATE('2016-05-01',V.Number ) = DATE(C.conversion_date)
39
+ WHERE ADDDATE('2016-05-01',V.Number) BETWEEN '2016-05-01' AND '2016-05-31'
40
+ GROUP BY ADDDATE('2016-05-01',V.Number)
41
+ ```
42
+
43
+ ###試したこと
44
+ IFNULL(SELECT COUNT(C.conversion_date) FROM t_conversion WHERE user_id = 001),0)
45
+ としてみましたが、上手くいきませんでした。
46
+
47
+
48
+
49
+ VIEWの作成
50
+ ```SQL
51
+ CREATE VIEW conversion_data_id AS
52
+ SELECT conversion_data
53
+ FROM t_conversion
54
+ WHERE user_id=001;
55
+ ```
56
+ としてからcount(conversion_data)した方がよいのでしょうか?