質問編集履歴
3
viewの作成に関する内容を変更しました。
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
|
|
52
|
+
CREATE VIEW vw_conversion AS
|
|
52
|
-
SELECT
|
|
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
|
-
と
|
|
63
|
+
とすれば期待通りの結果が得られるのですが、viewを使用すべきなのか、WHERE句で同じことができるのか
|
|
64
|
+
?疑問です。
|
2
t_conversionのテーブルの表記にuser_idを追記しました。
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
さらに詳しい内容を追記いたしました。
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -1,9 +1,56 @@
|
|
|
1
1
|
###実現したいこと
|
|
2
|
-
|
|
2
|
+
t_conversionのデータを一旦ユーザーIDで絞り込み、作成した1日〜31日までの日付テーブルにLEFT JOINし、結合したデータを期間をさらに指定して絞り込みたいと考えています。
|
|
3
3
|
|
|
4
|
-
1つのSQLで実行しようとするとき、2回発生す
|
|
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)した方がよいのでしょうか?
|