Oracle 同一张表,更具伪列排序 并且只要前三名。
select*from(select*from(selectclassid,chinese,maths,english,nvl(chinese,0)+nvl(maths,...
select * from (select * from ( select classid,chinese,maths,english, nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) 成绩和 from grade )ORDER by 成绩和 desc )where classid=1 and rownum<4
这语句只是得到了班级ID为1的 前三名的学生,但是还有 ID 为2、3、4的 我改怎么拼接语句?
谢谢。
(
select classid,chinese,maths,english, nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) 成绩和 from grade
)这语句是查询出所有的班级所有的学生.可以用得到。 展开
这语句只是得到了班级ID为1的 前三名的学生,但是还有 ID 为2、3、4的 我改怎么拼接语句?
谢谢。
(
select classid,chinese,maths,english, nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) 成绩和 from grade
)这语句是查询出所有的班级所有的学生.可以用得到。 展开
2个回答
展开全部
select row_number() over (order by a.成绩和 desc) rn
from
(select classid,chinese,maths,english, nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) 成绩和 from grade where classid=1) a
where rn<=3
更多追问追答
追问
“RN”标示符无效
追答
select b.* from
(select row_number() over (order by a.成绩和 desc) rn,a.*
from
(select classid,chinese,maths,english, nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) 成绩和 from grade where classid=1) a) b
where rn<=3
额,不好意思,一着急写少了一层,这样试试
展开全部
SELECT d.*
FROM
(SELECT g.Name,
U.Money,
Row_Number() Over(Partition BY groupid Order By money DESC)num
FROM users u,
groups g
WHERE g.id=u.groupid
)d
WHERE d.num<=3
这是显示 各 g.Name 前 3名 U.Money 的 看完你就会了
FROM
(SELECT g.Name,
U.Money,
Row_Number() Over(Partition BY groupid Order By money DESC)num
FROM users u,
groups g
WHERE g.id=u.groupid
)d
WHERE d.num<=3
这是显示 各 g.Name 前 3名 U.Money 的 看完你就会了
追问
完全不明白
1:我做的是一张表查询,不是连接查询。
2:Row_Number()是怎么用的?
3:Partition BY groupid Order By money DESC 这句话什么什么排序?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询