有一学生表,有三个成绩chinese,maths,english, 我要加一个伪列 成绩总分表
下面是我写的伪列统计总分表
select classid,chinese,maths,english, nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) 成绩和 from grade
用分组的话是这样的
SELECt * FROM (SELECt T.*, ROW_NUMBER() OVER(PARTITION BY classid ORDER BY english DESC) 总分 FROM grade T) WHERe 总分 < 4
这样只能用english分数大小排名,但是我想用伪列排名 我把english换成(select nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) 成绩和 from grade)报错单个子查询返回多个值。
求大神指教。
Oracle 按照伪列总分分组 分组之后得到每组的前三列。
答案:3 悬赏:0 手机版
解决时间 2021-02-02 11:19
- 提问者网友:川水往事
- 2021-02-02 06:19
最佳答案
- 五星知识达人网友:舍身薄凉客
- 2021-02-02 07:28
多加一层嵌套语句就能解决这个问题
SELECt T.*
FROM (
SELECt classid,chinese,maths,english, nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) total
FROM grade
) T
WHERe total < 4
ORDER BY total desc
当然,如果希望获取number号,进行分页,外面再增加一层即可
SELECt T.*
FROM (
SELECt classid,chinese,maths,english, nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) total
FROM grade
) T
WHERe total < 4
ORDER BY total desc
当然,如果希望获取number号,进行分页,外面再增加一层即可
全部回答
- 1楼网友:风格不统一
- 2021-02-02 08:41
试试
SELECt * FROM (SELECt T.*, ROW_NUMBER() OVER(PARTITION BY classid ORDER BY 总分 DESC) 总分 FROM
(select classid,chinese,maths,english, nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0) 总分 from grade)
T) WHERe 总分 < 4
- 2楼网友:duile
- 2021-02-02 07:36
难道把english换成nvl(chinese,0)+ nvl(maths,0)+ nvl(english,0)不行吗?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯