SQL使用子查詢,查找班級成績最高分


-- 根據要求,獲取班級成績的最高分的學生
-- 第一個子查詢,先去各個科目的最高,再橫向比較各個科目的最高,再取最高分的那個科目
-- 第二個子查詢,查詢每個同學的最高分
-- 最后,通過第一個子查詢查詢出第一個最高分,和第二個子查詢查詢出學生的最高,當這兩個相同時,即要獲取的最高分

 

第一:子查詢做的就是先去每個科目的最高分,再取各個科目的最高分

  • 第一:使用MAX取個各科的最高分(MAX返回一列中的最大值,即縱向比較取最大值)
  • 第二:縱向比較之后,需要橫向比較多個科目的最高分,再取多個科目的最大值,從多個值中取最大值 GREATEST
  • 第三:需要取的是每個班級的最高分,所以需要使用到分組 GROUP BY

SELECT class_name,GREATEST(MAX(Linux),MAX(MySQL),MAX(Java)) 'course_maxscore'
from tb_grade_score
GROUP BY class_name

 

第二:子查詢做的就是查詢每個同學的最高分,得出最高分,最后判斷最高和第一個子查詢的最高分是否一致,一致就是要找的學生

  • 使用GREATEST比較多個科目的分數,得出最大值

SELECT * ,GREATEST(Linux,MySQL,Java)'Maxscore' FROM tb_grade_score

 

第三:第一二子查詢,根據條件查詢 班級分數最高分和學生的最高分是否一致,一致的話,就是要找的最高分啦
SELECT t2.student_name,t2.class_name,t1.course_maxscore,t2.Maxscore
FROM
(SELECT class_name,GREATEST(MAX(Linux),MAX(MySQL),MAX(Java)) 'course_maxscore'
from tb_grade_score
GROUP BY class_name)t1,
(SELECT * ,GREATEST(Linux,MySQL,Java)'Maxscore' FROM tb_grade_score)t2
where t1.class_name = t2.class_name and t1.course_maxscore=t2.Maxscore

最終實現的結果:

原始的表數據

最終的結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM