You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用rownum获取带rank的前两条学生记录?

获取带排名的前两条记录(不使用rownum)

问题背景

现有学生表student_info,执行以下SQL可得到包含分数排名的结果集:

SELECT student_info.student_name, student_info.department, student_info.marks,
       rank() over (order by student_info.marks desc) score 
FROM student_info ;

需在不使用rownum的前提下,获取该结果集中带排名的前两条记录。


解决方案

方案1:通过子查询筛选排名值

如果需要获取所有排名≤2的记录(包含分数并列的情况),可以将原查询作为派生表,再过滤排名条件:

SELECT *
FROM (
    SELECT student_info.student_name, student_info.department, student_info.marks,
           rank() over (order by student_info.marks desc) score 
    FROM student_info
) ranked_students
WHERE score <= 2;

方案2:使用FETCH FIRST子句(适用于Oracle 12c+、PostgreSQL等支持SQL:2008的数据库)

如果需要严格返回排序后的前2行记录(每条记录保留对应的rank值),可直接使用FETCH FIRST子句:

SELECT student_info.student_name, student_info.department, student_info.marks,
       rank() over (order by student_info.marks desc) score 
FROM student_info
ORDER BY marks desc
FETCH FIRST 2 ROWS ONLY;

内容的提问来源于stack exchange,提问作者Indrakumar IndraKUMAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:55:25