根據下面3張表格,按要求使用SQL語句實現結果查詢
| class_no | st_no | st_name |
|---|---|---|
| c1 | st1 | Sam |
| c1 | st2 | lucy |
| c2 | st3 | jean |
| c2 | st4 | lock |
| c2 | st5 | lily |
| st_no | subject_no | score |
|---|---|---|
| st1 | 1 | 72 |
| st1 | 2 | 89 |
| st1 | 3 | 78 |
| st3 | 1 | 87 |
| st3 | 3 | 89 |
| st4 | 1 | 98 |
| st4 | 2 | 94 |
| subject_no | subject_name |
|---|---|
| 1 | Chinese |
| 2 | mathmatics |
| 3 | English |
(1) 查詢每個班級各科成績總和
(2) 查詢每個班級語文成績大於85分人數
(3) 查詢語文成績大於數學成績的姓名和歸屬班級
解:
(1)
SELECT 班級信息表.[class_no] , 課程表.[subject_name] , SUM(成績表.[score]) AS 成績總和 FROM 班級信息表,課程表,成績表 WHERE 班級信息表.[st_no] = 成績表.[st_no] AND 成績表.[subject_no] = 課程表.[subject_no] GROUP BY 班級信息表.[class_no] ,課程表.[subject_name];
| class_no | subject_name | 成績總和 |
|---|---|---|
| c1 | Chinese | 72 |
| c1 | English | 78 |
| c1 | mathmtics | 89 |
| c2 | Chinese | 185 |
| c2 | English | 89 |
| c2 | mathmtics | 94 |
(2)
SELECT 班級信息表.[class_no] , COUNT(成績表.[st_no]) AS 人數 FROM (成績表 LEFT JOIN 班級信息表 ON 成績表.[st_no] = 班級信息表.[st_no]) LEFT JOIN 課程表 ON 成績表.[subject_no] = 課程表.[subject_no] WHERE 課程表.[subject_name] = "Chinese" AND 成績表.score > 85 GROUP BY 班級信息表.[class_no] ;
| class_no | 人數 |
|---|---|
| c2 | 2 |
(3)
SELECT * FROM (SELECT 班級信息表.[class_no] , 班級信息表.[st_name] , SUM(IIf(課程表.[subject_name] = "Chinese",成績表.score,NULL)) AS 語文成績 , SUM(IIf(課程表.[subject_name] = "mathmatics",成績表.score,NULL)) AS 數學成績 FROM 班級信息表,成績表,課程表 WHERE 成績表.[st_no] = 班級信息表.[st_no] AND 成績表.[subject_no] = 課程表.[subject_no] GROUP BY 班級信息表.[class_no] , 班級信息表.[st_name]) WHERE 語文成績 > 數學成績;
| class_no | st_name | 語文成績 | 數學成績 |
|---|---|---|---|
| c2 | lock | 98 | 94 |
