[英]SQL on Oracle: Already joined two tables, now i want another column from another table(another join)
我有三张桌子。 1.学生-id,名称2.主题-sid,sname 3.结果-id,sid,标记(id和sid是上面两个表引用的外键)
现在,我表演
SELECT s.sname AS SubjectName, MAX(r.marks) AS MaxMarks
FROM subjects s, results r
WHERE s.sid=r.sid
GROUP BY r.sid, s.sname
ORDER BY r.sid
我得到的主题名称得分最高。 现在,进一步,我还想要获得这些最高分的学生姓名。
所以我尝试添加列r.id,没有用。 我尝试在该查询中添加学生表。 添加表格或其他内容后,我可能正在整理分组?
我做了这个
SELECT r.id AS StudentID, s.sname AS SubjectName, MAX(r.marks) AS MaxMarks
FROM subjects s, results r
WHERE s.sid=r.sid
GROUP BY r.sid, s.sname, r.id
ORDER BY r.sid
我得到了每个StudentID,其中包含重复的科目和分数。 而我基本上想要的是在每个学科中得分最高的学生。
您可以简单地添加新的联接,我建议您使用显式联接sintax
SELECT t.name, s.sname AS SubjectName, MAX(r.marks) AS MaxMarks
FROM subjects s
INNER JOIN results r ON s.sid=r.sid
INNER JOIN Students t ON t.id = r.id
GROUP BY r.sid, s.sname, t.name
ORDER BY r.sid
在隐式连接中,sintax应该是
SELECT s.sname AS SubjectName, MAX(r.marks) AS MaxMarks
FROM subjects s, results r, stundet t
WHERE s.sid=r.sid
and t.id = r.id
GROUP BY r.sid, s.sname, t.name
ORDER BY r.sid
您可以使用ROW_NUMBER()标记在每个主题上得分最高的学生
SELECT st.name,
sj.sname,
r.marks
FROM (SELECT id,
sid,
marks,
ROW_NUMBER() OVER (PARTITION BY sid
ORDER BY marks DESC) maxmarks
FROM results) r
JOIN students st
ON r.id = st.id
JOIN subjects sj
ON r.sid = sj.sid
WHERE r.maxmarks = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.