Oracle 写一个查询,该查询将获取每个科目中前三名学生的姓名以及他们的分数
我是PL/SQL新手,需要查询以下场景: 2张表:第一张表,带卷号、名称 第二卷,卷号,科目n标记 需要写一个查询,该查询将获取每个科目中排名前三的学生姓名以及他们的分数 我已经为上述问题编写了以下查询,但它没有获得正确的结果:Oracle 写一个查询,该查询将获取每个科目中前三名学生的姓名以及他们的分数,oracle,plsql,Oracle,Plsql,我是PL/SQL新手,需要查询以下场景: 2张表:第一张表,带卷号、名称 第二卷,卷号,科目n标记 需要写一个查询,该查询将获取每个科目中排名前三的学生姓名以及他们的分数 我已经为上述问题编写了以下查询,但它没有获得正确的结果: SELECT TABLE1.NAME, MAX(TABLE2.MARKS) FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.ROLL_NO = TABLE2.ROLL_NO GROUP BY SUB ORDER BY TABLE2
SELECT TABLE1.NAME, MAX(TABLE2.MARKS)
FROM
TABLE1
INNER JOIN
TABLE2
ON TABLE1.ROLL_NO = TABLE2.ROLL_NO
GROUP BY SUB
ORDER BY TABLE2.MARKS
HAVING ROWNUM <3
您可以像这样使用行数窗口函数
SELECT
*
FROM (
SELECT
MARKS.ROLL_NO
, MARKS.SUBJECT
, MARKS.MARKS
, ROW_NUMBER() OVER (PARTITION BY ROLL_NO ORDER BY MARKS DESC) AS rank
FROM
MARKS
) MARKS_RANKED
INNER JOIN
STUDENT
ON
MARKS_RANKED.ROLL_NO = STUDENT.ROLL_NO
WHERE
rank <= 3
演示使用示例数据共享表格。。那样你会变得更好的。。解决方案涉及MySQL的用户变量,因为ROWNUM不存在于MySQL中。如果您是PL/SQL新手,为什么要标记MySQL?我相信您使用的是OracleI,我已经更新了上面的表数据
SELECT
*
FROM (
SELECT
MARKS.ROLL_NO
, MARKS.SUBJECT
, MARKS.MARKS
, ROW_NUMBER() OVER (PARTITION BY ROLL_NO ORDER BY MARKS DESC) AS rank
FROM
MARKS
) MARKS_RANKED
INNER JOIN
STUDENT
ON
MARKS_RANKED.ROLL_NO = STUDENT.ROLL_NO
WHERE
rank <= 3