回答編集履歴
4
追記
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
|
-
,
|
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
追記
test
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
,tmp.weight_range
|
42
42
|
|
43
|
-
,
|
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
|
-
|
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
修正
test
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
,tmp.weight_range
|
42
42
|
|
43
|
-
,
|
43
|
+
,COUNT(tbl_student.name)
|
44
44
|
|
45
45
|
FROM
|
46
46
|
|
1
追記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
以下は共通表式を用いたPostgreSQLでの例。
|
1
|
+
以下は共通表式を用いたPostgreSQLでの例。一時的な表をSQL中に記述することが出来ます。
|
2
2
|
|
3
3
|
共通表式はMySQLでは8.0からでしか利用できませんが、他の主要なDBMSでは以前からサポートされています。
|
4
4
|
|