多表查找最大/最小值對(duì)應(yīng)的信息

前兩天去面試,面試官出了兩道很有意思的mysql題目,當(dāng)時(shí)沒有寫出來,下來自己做的時(shí)候發(fā)現(xiàn)真的沒那么簡(jiǎn)單,所以必須記錄下來。

現(xiàn)在有三個(gè)表

學(xué)生表 student

student_id ? ? ? ? ? ? student_name

課程表 course

course_id ? ? ? ? ? ? ?course_name

成績(jī)表 grades

student_id? ? ? ? ? ? ? course_id ? ? ? ? ? ? ? ?grade


題目一:找到所有每門課都及格的學(xué)生

思路:分組查找每個(gè)學(xué)生的最低分,過濾掉最低分小于60的同學(xué)

SELECT student.student_name AS pass_student, MIN(grades.grade) AS min_score

FROM student INNER JOIN grades ON student.student_id = grades.student_id

GROUP BY student.student_id

HAVING min_score >= 60;


題目二:找到每門課程的最高分對(duì)應(yīng)的學(xué)生名字

思路:如果想要三表聯(lián)合查詢,以課程分組的最大值,學(xué)生姓名和課程名字的話,你會(huì)發(fā)現(xiàn)學(xué)生姓名是錯(cuò)的,因?yàn)榉纸M之后,學(xué)生姓名會(huì)變成該組第一個(gè)學(xué)生,而不是最高分對(duì)應(yīng)的學(xué)生。

可行的查詢方法如下:

-- CREATE TABLE a AS

-- SELECT course.course_id, student_id, course_name, grade FROM

-- course INNER JOIN grades ON course.course_id = grades.course_id;


-- CREATE TABLE b AS

-- SELECT student.student_id, student_name, course_id,? course_name, grade

-- FROM a INNER JOIN student ON student.student_id = a.student_id;

/×在表b中找到分組后的最高分和對(duì)應(yīng)的course_id, 然后在一個(gè)總表中查找對(duì)應(yīng)最高分和course_id的student_name和course_name×/

SELECT b.course_name, b.student_name, b.grade AS max_score FROM b,

(SELECT course_id, MAX(grade) AS max_score FROM a GROUP BY course_id)c

WHERE b.course_id = c.course_id AND b.grade = c.max_score


這段代碼的麻煩之處是又重新建了兩個(gè)表,雖然說肯定會(huì)有更好的辦法,但懶得再想了,多學(xué)一陣再說吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 50個(gè)常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,334評(píng)論 0 7
  • 一、多表查詢 --編寫多表查詢語句的一般過程 --(1)、分析句子要涉及到哪些表 --(2)、對(duì)應(yīng)的表中要查詢哪些...
    __71db閱讀 1,906評(píng)論 0 6
  • 說明:以下五十個(gè)語句都按照測(cè)試數(shù)據(jù)進(jìn)行過測(cè)試,最好每次只單獨(dú)運(yùn)行一個(gè)語句。 問題及描述: --1.學(xué)生表 Stud...
    lijun_m閱讀 1,381評(píng)論 0 1
  • 【Day3】從Odda輾轉(zhuǎn)到Lysebotn的青旅,我也在老司機(jī)的指導(dǎo)下開了段九曲十八彎的山路。 開隧道的時(shí)候,莫...
    Pinicilin閱讀 245評(píng)論 0 0
  • 一開始,我并沒有注意到他,他是大二的時(shí)候從另外一個(gè)學(xué)院轉(zhuǎn)過來的,好多同學(xué)說實(shí)在不明白他為何要來我們?cè)?,我承認(rèn)我們?cè)?..
    張阿狗閱讀 423評(píng)論 0 0

友情鏈接更多精彩內(nèi)容