请教一个分组排序的 SQL语句

chufeng_007 2005-08-27 05:26:35
现在在一个成绩表(学生姓名,课程名称,成绩) tb_score(studentName,subjectName,score)
要求查询出此表中各课成绩前三名的记录
...全文
200 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shyming 2005-09-01
  • 打赏
  • 举报
回复
不錯,不錯!
TWWH 2005-09-01
  • 打赏
  • 举报
回复
acmly(Paolo)的语句正确的。
改进一下,就看得更清楚了:

SELECT subjectName,studentName, score FROM
tb_score a
WHERE (SELECT count(*) FROM tb_score b WHERE b.score > a.score and
b.subjectName = a.subjectName) <3
ORDER BY SUBJECTNAME,SCORE DESC,STUDENTNAME

这是按每门课的前3名排序后的结果。

SInoyew 2005-08-30
  • 打赏
  • 举报
回复
两个写的不错。
超叔csdn 2005-08-30
  • 打赏
  • 举报
回复
acmly(Paolo)
我只想到了用分析函数来做,我当时看到你的SQL才感觉到高手就是不一样啊.
虽然有点小失误,但方法还是正确的.
acmly 2005-08-30
  • 打赏
  • 举报
回复
不错不错,谢谢sbaz(万神渡劫),应该写成:
SELECT studentName, subjectName, score FROM tb_score a WHERE (SELECT count(*) FROM tb_score b WHERE b.score > a.score and b.subjectName = a.subjectName) <3;
danisluo 2005-08-29
  • 打赏
  • 举报
回复
select top 3 from tb_score
group by score desc
超叔csdn 2005-08-29
  • 打赏
  • 举报
回复
acmly(Paolo) 的方法也很好.只是好象是前4名的
超叔csdn 2005-08-29
  • 打赏
  • 举报
回复
select studentName, subjectName, score
from (SELECT rank() over(partition by a.subjectName order by a.score desc) as num,studentName, subjectName, score
FROM tb_score a
) b
where b.num <= 3
acmly 2005-08-27
  • 打赏
  • 举报
回复
SELECT studentName, subjectName, score FROM tb_score a WHERE (SELECT count(*) FROM tb_score b WHERE b.score > a.score and b.subjectName = a.subjectName) <=3;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧