回答編集履歴

4

追記

2017/11/14 22:36

投稿

SVC34
SVC34

スコア1149

test CHANGED
@@ -1,4 +1,10 @@
1
- 以下は共通表式を用いたPostgreSQLでの例。一時的な表をSQL中に記述することが出来ます。
1
+ 以下は共通表式 (CTE) を用いたPostgreSQLでの例。一時的な表をSQL中に記述することが出来ます。
2
+
3
+
4
+
5
+ 体重レンジのCTEとクラス一覧のCTEをクロス結合して集計パターンを網羅した中間テーブルを作り、そこにtbl_studentを外部結合して集計しています。
6
+
7
+
2
8
 
3
9
  共通表式はMySQLでは8.0からでしか利用できませんが、他の主要なDBMSでは以前からサポートされています。
4
10
 
@@ -40,7 +46,7 @@
40
46
 
41
47
  ,tmp.weight_range
42
48
 
43
- ,count(tbl_student.weight)
49
+ ,COUNT(tbl_student.weight)
44
50
 
45
51
  FROM
46
52
 
@@ -58,9 +64,7 @@
58
64
 
59
65
  tmp.weight_range = 60
60
66
 
61
- AND
62
-
63
- tbl_student.weight >= 60
67
+ AND tbl_student.weight >= 60
64
68
 
65
69
  )
66
70
 

3

追記

2017/11/14 22:36

投稿

SVC34
SVC34

スコア1149

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  ,tmp.weight_range
42
42
 
43
- ,COUNT(tbl_student.name)
43
+ ,count(tbl_student.weight)
44
44
 
45
45
  FROM
46
46
 
@@ -50,7 +50,21 @@
50
50
 
51
51
  ON tmp.class = tbl_student.class
52
52
 
53
+ AND (
54
+
53
- AND tmp.weight_range = TRUNC(tbl_student.weight, -1)
55
+ tmp.weight_range = TRUNC(tbl_student.weight, -1)
56
+
57
+ OR (
58
+
59
+ tmp.weight_range = 60
60
+
61
+ AND
62
+
63
+ tbl_student.weight >= 60
64
+
65
+ )
66
+
67
+ )
54
68
 
55
69
  GROUP BY
56
70
 

2

修正

2017/11/14 21:45

投稿

SVC34
SVC34

スコア1149

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  ,tmp.weight_range
42
42
 
43
- ,count(tbl_student.weight)
43
+ ,COUNT(tbl_student.name)
44
44
 
45
45
  FROM
46
46
 

1

追記

2017/11/14 21:35

投稿

SVC34
SVC34

スコア1149

test CHANGED
@@ -1,4 +1,4 @@
1
- 以下は共通表式を用いたPostgreSQLでの例。
1
+ 以下は共通表式を用いたPostgreSQLでの例。一時的な表をSQL中に記述することが出来ます。
2
2
 
3
3
  共通表式はMySQLでは8.0からでしか利用できませんが、他の主要なDBMSでは以前からサポートされています。
4
4