007、【上海悠悠】sql面試題_1,學生表、成績表
阿新 • • 發佈:2021-10-13
參考:
1、https://www.cnblogs.com/yoyoketang/p/10065424.html
萬年不變學生表
有2張表,學生表(student)基本資訊如下:
科目和分數表(grade)如下:
問:
- 1.查詢所有學生的數學成績,顯示學生姓名name, 分數, 由高到低
- 2.統計每個學生的總成績,顯示欄位:姓名,總成績
- 3.統計每個學生的總成績(由於學生可能有重複名字),顯示欄位:學生id,姓名,總成績
- 4.列出各門課程成績最好的學生, 要求顯示欄位: 學號,姓名,科目,成績
- 5.列出各門課程成績最好的2位學生, 要求顯示欄位: 學號,姓名, 科目,成績
個人解答如下:
#1.查詢所有學生的數學成績,顯示學生姓名name, 分數, 由高到低
# 執行結果成功。
select s.name, g.kemu, g.score from student s join grade g on s.id=g.id where g.kemu='數學' order by g.score desc; # 2.統計每個學生的總成績,顯示欄位:姓名,總成績
# 執行結果成功。
gradeselect s.name, sum(g.score) from student s join grade g on s.id=g.id group by s.id; # 3.統計每個學生的總成績(由於學生可能有重複名字),顯示欄位:學生id,姓名,總成績# 執行結果成功。
select s.id, s.name, sum(g.score) from student s join grade g on s.id=g.id group by s.id; # 4.列出各門課程成績最好的學生, 要求顯示欄位: 學號,姓名,科目,成績 select s.id,s.name,g.kemu,g.score from student s join grade g on s.id=g.id join (select g.kemu, max(g.score) as max_score from grade g group by g.kemu) t on t.kemu=g.kemu where t.max_score=g.score and g.id=s.id; # 5.列出各門課程成績最好的2位學生, 要求顯示欄位: 學號,姓名, 科目,成績 # 答案看不懂。 SELECT t1.id, a.name, t1.kemu, t1.score FROM grade t1, student a WHERE (SELECT count(*) FROM grade t2 WHERE t1.kemu=t2.kemu AND t2.score>t1.score)<2 and a.id = t1.id ORDER BY t1.kemu,t1.score DESC