1. 程式人生 > 其它 >007、【上海悠悠】sql面試題_1,學生表、成績表

007、【上海悠悠】sql面試題_1,學生表、成績表

參考:

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