Reputation: 907
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
Upvotes: 5
Views: 3145
Reputation: 31
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;
Upvotes: 3
Reputation: 15061
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)
Upvotes: 4
Reputation: 12378
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
Upvotes: 3