質問編集履歴
4
訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -15,7 +15,8 @@
|
|
15
15
|
以下のような結果を期待しています。
|
16
16
|
~~どのようなSQLを書けば実現できますか?~~
|
17
17
|
※追記:実現はできました。
|
18
|
-
しかし、一時テーブルを作成
|
18
|
+
しかし、一時テーブルを作成する部分のSQLがパフォーマンスがよくなさそうです。
|
19
|
+
最初にproduct_id, dateをあらかじめ用意せずにできそうな気もしていますがやりかたが分かりません。
|
19
20
|
もっとよいSQLはありますでしょうか?
|
20
21
|
|
21
22
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-11-16/4d6e10a1-77ab-47a3-a4e9-9544bc705c04.png)
|
3
タグ追加
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
2
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -13,12 +13,49 @@
|
|
13
13
|
|
14
14
|
# 質問
|
15
15
|
以下のような結果を期待しています。
|
16
|
-
どのようなSQLを書けば実現できますか?
|
16
|
+
~~どのようなSQLを書けば実現できますか?~~
|
17
|
+
※追記:実現はできました。
|
18
|
+
しかし、一時テーブルを作成してから集計する事はパフォーマンスがよくなさそうです。
|
19
|
+
もっとよいSQLはありますでしょうか?
|
20
|
+
|
17
21
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-11-16/4d6e10a1-77ab-47a3-a4e9-9544bc705c04.png)
|
18
22
|
|
23
|
+
|
19
24
|
### 試したこと
|
25
|
+
追記:以下のように一時テーブルを作成してから集計すると期待する結果が得られました。
|
26
|
+
```SQL
|
27
|
+
create temporary table `tmp_dates`
|
28
|
+
select
|
29
|
+
tmp.`product_id`,
|
30
|
+
tmp.`date`
|
31
|
+
from (
|
32
|
+
select `product_id`, `date` from sell_logs
|
33
|
+
union all
|
34
|
+
select `product_id`, `date` from return_logs
|
35
|
+
) tmp
|
36
|
+
;
|
37
|
+
|
38
|
+
select
|
39
|
+
p.id,
|
40
|
+
p.`name`,
|
41
|
+
td.`date`,
|
42
|
+
sl.`num`,
|
43
|
+
rl.`num`
|
44
|
+
from `tmp_dates` td
|
45
|
+
left outer join sell_logs sl on sl.`product_id` = td.`product_id` and sl.`date` = td.`date`
|
46
|
+
left outer join return_logs rl on rl.`product_id` = td.`product_id` and rl.`date` = td.`date`
|
47
|
+
inner join products p on p.id = td.product_id
|
48
|
+
|
49
|
+
group by
|
50
|
+
p.`id`,
|
51
|
+
td.`date`;
|
52
|
+
```
|
53
|
+
|
54
|
+
|
20
|
-
`return_logs`にだけ`2023-01-04`が存在するので、`2023-01-04`が取得できるように日付専用で一時テーブルを作成してからJOINして集計を試みました。
|
55
|
+
~~`return_logs`にだけ`2023-01-04`が存在するので、`2023-01-04`が取得できるように日付専用で一時テーブルを作成してからJOINして集計を試みました。
|
21
|
-
しかし期待する結果が得られませんでした。
|
56
|
+
しかし期待する結果が得られませんでした。~~
|
57
|
+
|
58
|
+
<s>
|
22
59
|
|
23
60
|
```SQL
|
24
61
|
/* 一時テーブルを作成して集計する */
|
@@ -47,6 +84,7 @@
|
|
47
84
|
p.`id`,
|
48
85
|
td.`date`;
|
49
86
|
```
|
87
|
+
</s>
|
50
88
|
|
51
89
|
### ソースコード
|
52
90
|
https://dbfiddle.uk/tRKBk26A
|
1
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -21,6 +21,7 @@
|
|
21
21
|
しかし期待する結果が得られませんでした。
|
22
22
|
|
23
23
|
```SQL
|
24
|
+
/* 一時テーブルを作成して集計する */
|
24
25
|
create temporary table `tmp_dates`
|
25
26
|
select
|
26
27
|
tmp.`date`
|
@@ -30,6 +31,21 @@
|
|
30
31
|
select `date` from return_logs
|
31
32
|
) tmp
|
32
33
|
;
|
34
|
+
|
35
|
+
select
|
36
|
+
p.id,
|
37
|
+
p.`name`,
|
38
|
+
td.`date`,
|
39
|
+
sl.`num`,
|
40
|
+
rl.`num`
|
41
|
+
from `tmp_dates` td
|
42
|
+
left outer join sell_logs sl on sl.`date` = td.`date`
|
43
|
+
left outer join return_logs rl on rl.`date` = td.`date`
|
44
|
+
inner join products p on p.id = sl.product_id
|
45
|
+
|
46
|
+
group by
|
47
|
+
p.`id`,
|
48
|
+
td.`date`;
|
33
49
|
```
|
34
50
|
|
35
51
|
### ソースコード
|