Join three tables with MAX function

天涯浪子 提交于 2021-02-08 16:52:20

问题


I have three tables: student, subject and score.
I want to display the details of max(subject_id) of each student.

student table

student_id   student_name  exam_date
   1            Sharukh     24/06/12
   2            Amir        23/06/12

subject table

subject_id    sub_name
   200         Maths
   300         English
   400         Science

score table

student_id   subject_id     score
    1           200         50 
    1           300         20
    2           300         10

The result should be:

student_id    student_name     subject_id      score
     1          Sharukh           300            20
     2          Amir              300            10

回答1:


Use the MAX function and GROUP BY your other selections.

SELECT st.student_id, st.student_name, MAX(su.subject_id) AS subject_id, sc.score
FROM student st
INNER JOIN score sc ON st.student_id = sc.student_id
INNER JOIN subject su ON sc.subject_id = su.subject_id
WHERE su.subject_id = (SELECT MAX(sca.subject_id) 
                       FROM score sca 
                       WHERE sc.student_id = sca.student_id 
                       GROUP BY sca.student_id)
GROUP BY st.student_id, st.student_name, sc.score

Output:

student_id  student_name  subject_id  score
1           Sharukh       300         20
2           Amir          300         10

SQL Fiddle: http://sqlfiddle.com/#!9/71c46a/7/0

Without the GROUP BY

SELECT st.student_id, st.student_name, su.subject_id, sc.score
FROM student st
INNER JOIN score sc ON st.student_id = sc.student_id
INNER JOIN subject su ON sc.subject_id = su.subject_id
WHERE su.subject_id = (SELECT MAX(sca.subject_id) 
                       FROM score sca 
                       WHERE sc.student_id = sca.student_id 
                       GROUP BY sca.student_id)



回答2:


Here no need to use all three tables, You can get ans from table student and score.

SELECT c.student_id, c.student_name, c.subject_id, c.score FROM 
(SELECT a.student_id, a.student_name, b.subject_id, b.score FROM student 
a JOIN score b ON a.student_id = b.student_id) c JOIN 
(SELECT student_id, MAX(subject_id) AS subject_id FROM score GROUP      
BY student_id) d 
ON c.student_id = d.student_id AND c.subject_id = d.subject_id;



回答3:


Try this;)

select t1.student_id, t1.student_name, t3.subject_id, t3.score
from student t1
inner join subject t2
inner join score t3
inner join (
    select max(subject_id) as subject_id, student_id
    from score group by student_id
) t4 on t3.student_id = t4.student_id and t3.subject_id = t4.subject_id
and t2.subject_id = t3.subject_id 
and t1.student_id = t3.student_id

SQLFiddle DEMO HERE



来源:https://stackoverflow.com/questions/37963264/join-three-tables-with-max-function

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!