回答編集履歴
4
追記
answer
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
以下は共通表式を用いたPostgreSQLでの例。一時的な表をSQL中に記述することが出来ます。
|
1
|
+
以下は共通表式 (CTE) を用いたPostgreSQLでの例。一時的な表をSQL中に記述することが出来ます。
|
2
|
+
|
3
|
+
体重レンジのCTEとクラス一覧のCTEをクロス結合して集計パターンを網羅した中間テーブルを作り、そこにtbl_studentを外部結合して集計しています。
|
4
|
+
|
2
5
|
共通表式はMySQLでは8.0からでしか利用できませんが、他の主要なDBMSでは以前からサポートされています。
|
3
6
|
|
4
7
|
```sql
|
@@ -19,7 +22,7 @@
|
|
19
22
|
SELECT
|
20
23
|
tmp.class
|
21
24
|
,tmp.weight_range
|
22
|
-
,
|
25
|
+
,COUNT(tbl_student.weight)
|
23
26
|
FROM
|
24
27
|
(SELECT * FROM cte_c, cte_w) AS tmp
|
25
28
|
LEFT OUTER JOIN tbl_student
|
@@ -28,8 +31,7 @@
|
|
28
31
|
tmp.weight_range = TRUNC(tbl_student.weight, -1)
|
29
32
|
OR (
|
30
33
|
tmp.weight_range = 60
|
31
|
-
AND
|
32
|
-
tbl_student.weight >= 60
|
34
|
+
AND tbl_student.weight >= 60
|
33
35
|
)
|
34
36
|
)
|
35
37
|
GROUP BY
|
3
追記
answer
CHANGED
@@ -19,12 +19,19 @@
|
|
19
19
|
SELECT
|
20
20
|
tmp.class
|
21
21
|
,tmp.weight_range
|
22
|
-
,
|
22
|
+
,count(tbl_student.weight)
|
23
23
|
FROM
|
24
24
|
(SELECT * FROM cte_c, cte_w) AS tmp
|
25
25
|
LEFT OUTER JOIN tbl_student
|
26
26
|
ON tmp.class = tbl_student.class
|
27
|
+
AND (
|
27
|
-
|
28
|
+
tmp.weight_range = TRUNC(tbl_student.weight, -1)
|
29
|
+
OR (
|
30
|
+
tmp.weight_range = 60
|
31
|
+
AND
|
32
|
+
tbl_student.weight >= 60
|
33
|
+
)
|
34
|
+
)
|
28
35
|
GROUP BY
|
29
36
|
tmp.class
|
30
37
|
,tmp.weight_range
|
2
修正
answer
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
SELECT
|
20
20
|
tmp.class
|
21
21
|
,tmp.weight_range
|
22
|
-
,
|
22
|
+
,COUNT(tbl_student.name)
|
23
23
|
FROM
|
24
24
|
(SELECT * FROM cte_c, cte_w) AS tmp
|
25
25
|
LEFT OUTER JOIN tbl_student
|
1
追記
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
以下は共通表式を用いたPostgreSQLでの例。
|
1
|
+
以下は共通表式を用いたPostgreSQLでの例。一時的な表をSQL中に記述することが出来ます。
|
2
2
|
共通表式はMySQLでは8.0からでしか利用できませんが、他の主要なDBMSでは以前からサポートされています。
|
3
3
|
|
4
4
|
```sql
|