teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記

2017/11/14 22:36

投稿

SVC34
SVC34

スコア1149

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
- ,count(tbl_student.weight)
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

追記

2017/11/14 22:36

投稿

SVC34
SVC34

スコア1149

answer CHANGED
@@ -19,12 +19,19 @@
19
19
  SELECT
20
20
  tmp.class
21
21
  ,tmp.weight_range
22
- ,COUNT(tbl_student.name)
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
- AND tmp.weight_range = TRUNC(tbl_student.weight, -1)
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

修正

2017/11/14 21:45

投稿

SVC34
SVC34

スコア1149

answer CHANGED
@@ -19,7 +19,7 @@
19
19
  SELECT
20
20
  tmp.class
21
21
  ,tmp.weight_range
22
- ,count(tbl_student.weight)
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

追記

2017/11/14 21:35

投稿

SVC34
SVC34

スコア1149

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