---
tags: database
---
# 11/29
1
查詢各科平均成績與及格率,並從低到高和及格率的百分數從高到低排序
```
SELECT r.c_no AS 課程編號,AVG(r.r_result) AS 平均成績
,COUNT(case when r.r_result>=60 then 1 end)*1.0/COUNT(r.r_result)*100.0 AS 及格率
FROM dbo.results as r
GROUP BY r.c_no
ORDER BY 平均成績,及格率 DESC
```
2
查詢「英文課」比「數學課」成績高的所有學生的學號、姓名;
```
SELECT s.s_no,s_name
FROM students AS s
,(SELECT * FROM results as a WHERE a.c_no='C0001' ) as aa
,(SELECT * FROM results as b WHERE b.c_no='C0003' ) as bb
WHERE aa.r_result<bb.r_result and aa.s_no=bb.s_no and aa.s_no=s.s_no and aa.s_no=bb.s_no
```
3
查詢平均成績大於 60 分的同學學號和平均成績;
```
SELECT r.s_no,AVG(r.r_result) AS 平均成績
FROM dbo.results as r
GROUP BY r.s_no
HAVING AVG(r.r_result)>60
```
4
查詢所有同學的學號、姓名、選課數、總成績;
```
SELECT r.s_no,s_name,COUNT(r.r_result) AS 選課數,SUM(r.r_result) AS 總成績
FROM dbo.results AS r
LEFT JOIN dbo.students as s ON r.s_no=s.s_no
GROUP BY r.s_no,s_name
ORDER BY r.s_no ASC
```
5
查詢沒有學所有課的同學的學號、姓名;
```
SELECT r.s_no,s_name
FROM dbo.students AS s
LEFT JOIN dbo.results AS r ON s.s_no=r.s_no
GROUP BY r.s_no,s_name
HAVING COUNT(r.s_no)<(
SELECT COUNT(c.c_no)
FROM dbo.classes as c
)
ORDER BY r.s_no ASC
```
6
查詢修課人數少於 10 人的課程編號和課程名稱
```
SELECT c.c_no,c.c_name
FROM dbo.results AS r
LEFT JOIN dbo.classes AS c ON c.c_no=r.c_no
GROUP BY c.c_no,c.c_name
HAVING COUNT(r.c_no)<10
```