回答編集履歴

2

SQL文が実装に依存していた問題点を修正した

2021/12/11 10:05

投稿

srsnsts
srsnsts

スコア508

test CHANGED
@@ -22,23 +22,43 @@
22
22
 
23
23
  コメントを受けてクエリを考えました。以下でどうでしょう。
24
24
 
25
+
26
+
25
27
  ```SQL
26
28
 
27
- SELECT
29
+ -- 修正版 実装に依存していた書き方を改めた
28
30
 
29
- a.id,
31
+ select
30
32
 
31
- a.sale,
33
+ test.id,
32
34
 
33
- a.dt as 'date',
35
+ test.sale,
34
36
 
35
- case when count(b.id) < 3 then null else sum(b.sale) end as 'sum'
37
+ test.dt as 'date',
36
38
 
37
- from test as a inner join test as b
39
+ case when tmp.cnt < 3 then null else tmp.gokei end as 'sum'
38
40
 
39
- on (b.id >= a.id - 2 and b.id <= a.id)
41
+ from test inner join
40
42
 
43
+ (
44
+
45
+ select
46
+
47
+ a.id,
48
+
49
+ sum(b.sale) as gokei,
50
+
51
+ count(b.id) as cnt
52
+
53
+ from test as a inner join test as b
54
+
55
+ on (b.id >= a.id - 2 and b.id <= a.id)
56
+
41
- group by a.id
57
+ group by a.id
58
+
59
+ ) tmp
60
+
61
+ on (test.id = tmp.id)
42
62
 
43
63
  ```
44
64
 

1

SQL文追加

2021/12/11 10:05

投稿

srsnsts
srsnsts

スコア508

test CHANGED
@@ -13,3 +13,63 @@
13
13
 
14
14
 
15
15
  どちらが正しいのでしょうか。
16
+
17
+
18
+
19
+ *** 以下追記
20
+
21
+
22
+
23
+ コメントを受けてクエリを考えました。以下でどうでしょう。
24
+
25
+ ```SQL
26
+
27
+ SELECT
28
+
29
+ a.id,
30
+
31
+ a.sale,
32
+
33
+ a.dt as 'date',
34
+
35
+ case when count(b.id) < 3 then null else sum(b.sale) end as 'sum'
36
+
37
+ from test as a inner join test as b
38
+
39
+ on (b.id >= a.id - 2 and b.id <= a.id)
40
+
41
+ group by a.id
42
+
43
+ ```
44
+
45
+
46
+
47
+ 実行結果は以下のとおりです。
48
+
49
+
50
+
51
+ (テーブル名はtestとしています。
52
+
53
+ フィールド名dateは予約語の可能性があるのでdtに変更しています。)
54
+
55
+
56
+
57
+ ```
58
+
59
+ id sale date sum
60
+
61
+ 1 1200 2020-11-11 NULL
62
+
63
+ 2 3500 2020-11-12 NULL
64
+
65
+ 3 400 2020-11-13 5100
66
+
67
+ 4 5000 2020-11-14 8900
68
+
69
+ 5 4000 2020-11-15 9400
70
+
71
+ 6 15000 2020-11-16 24000
72
+
73
+
74
+
75
+ ```