SQL> select * from temp3;
姓名 科目 期中成绩
------ ---- ----------
小红 语文 90
小明 语文 89
小红 英语 79
小明 英语 73
小张 语文 80
小张 英语 80SQL> select * from temp4;
姓名 科目 期末成绩
------ ---- ----------
小红 语文 82
小红 英语 79
小明 英语 82我想得到的查询结果是:
姓名 科目 期中成绩 期中名次 期末成绩 期末名次
------ ---- ---------- ---------- ---------- ----------
小张 英语 80 1 3
小红 英语 79 2 79 2
小明 英语 73 3 82 1
小红 语文 90 1 82 1
小明 语文 89 2 2
小张 语文 80 3 2我所使用的方法是:
select temp3.姓名,temp3.科目,temp3.期中成绩,rank() over(partition by temp3.
科目 order by 期中成绩 desc) as 期中名次,temp4.期末成绩,rank() over(partition by
temp4.科目 order by 期末成绩 desc) as 期末名次 from temp3 left join temp4 on te
mp3.姓名=temp4.姓名 and temp3.科目=temp4.科目得到的错误结果如下:姓名 科目 期中成绩 期中名次 期末成绩 期末名次
------ ---- ---------- ---------- ---------- ----------
小张 英语 80 1 1
小红 英语 79 2 79 2
小明 英语 73 3 82 1
小红 语文 90 1 82 1
小明 语文 89 2 1
小张 语文 80 3 1
想了好久了,望大虾位指点一下:
姓名 科目 期中成绩
------ ---- ----------
小红 语文 90
小明 语文 89
小红 英语 79
小明 英语 73
小张 语文 80
小张 英语 80SQL> select * from temp4;
姓名 科目 期末成绩
------ ---- ----------
小红 语文 82
小红 英语 79
小明 英语 82我想得到的查询结果是:
姓名 科目 期中成绩 期中名次 期末成绩 期末名次
------ ---- ---------- ---------- ---------- ----------
小张 英语 80 1 3
小红 英语 79 2 79 2
小明 英语 73 3 82 1
小红 语文 90 1 82 1
小明 语文 89 2 2
小张 语文 80 3 2我所使用的方法是:
select temp3.姓名,temp3.科目,temp3.期中成绩,rank() over(partition by temp3.
科目 order by 期中成绩 desc) as 期中名次,temp4.期末成绩,rank() over(partition by
temp4.科目 order by 期末成绩 desc) as 期末名次 from temp3 left join temp4 on te
mp3.姓名=temp4.姓名 and temp3.科目=temp4.科目得到的错误结果如下:姓名 科目 期中成绩 期中名次 期末成绩 期末名次
------ ---- ---------- ---------- ---------- ----------
小张 英语 80 1 1
小红 英语 79 2 79 2
小明 英语 73 3 82 1
小红 语文 90 1 82 1
小明 语文 89 2 1
小张 语文 80 3 1
想了好久了,望大虾位指点一下:
解决方案 »
- 如果写批处理文件
- 【挑战】关于oracle 查询问题,看起来很简单,但就是很难!
- ORA-04031: unable to allocate 32 bytes of shared memory ("shared pool","insert into AppLog nolo...","sql area","kglhin: temp")
- 请教一个关于视图方面的问题
- oracle9i启动后占用CPU100%,有没有人能解决这个问题?急
- 请教SQL函数!
- 如何获得管理员的权限阿?我要recover,单提醒我没有权限
- 一个触发器的问题
- 为什么点击Net Configuration Assistant没有反映呢??
- oracle9i安装补丁程序在哪下载?散分呀!兄弟们
- 按日期分组
- 替换字符的问题
rank() over(partition by
temp4.科目 order by 期末成绩 desc)
改成这样
rank() over(partition by
temp4.科目 order by 期末成绩 desc nulls last)
------ ------ ----------
小张 英语 80
小张 语文 80
小明 英语 73
小红 英语 79
小明 语文 89
小红 语文 90已选择6行。SQL> select * from b;TNAME KM CJ
------ ------ ----------
小红 语文 82
小红 英语 79
小明 英语 82SQL> select aa.tname,aa.km,aa.cj,aa.num,bb.cj,bb.num from
2 (select tname,km,cj,rank() over(partition by km order by cj desc ) num from
a ) aa,
3 (select a.tname,a.km,b.cj,rank() over(partition by a.km order by nvl(b.cj,0
) desc ) num from a,b
4 where a.tname=b.tname(+)
5 and a.km=b.km(+)) bb
6 where aa.tname=bb.tname
7 and aa.km=bb.km
8 order by 2,4;TNAME KM CJ NUM CJ NUM
------ ------ ---------- ---------- ---------- ----------
小张 英语 80 1 3
小红 英语 79 2 79 2
小明 英语 73 3 82 1
小红 语文 90 1 82 1
小明 语文 89 2 2
小张 语文 80 3 2
temp4.科目 order by 期末成绩 desc)
这里面还有错误
应该是rank() over(partition by
temp3.科目 order by 期末成绩 desc)temp4的话,就会有空值,所以造成语文有三个排名第一名
select 姓名,
科目,
期中成绩,
decode(期末成绩, 0, '', 期末成绩) 期末成绩,
rank() over(partition by 科目 order by 期中成绩 desc) as 期中名次,
rank() over(partition by 科目 order by 期末成绩 desc) as 期末名次
from (select temp3.姓名,
temp3.科目,
temp3.期中成绩,
nvl(temp4.期末成绩, 0) 期末成绩
from temp3, temp4
where temp3.姓名 = temp4.姓名(+)
and temp3.科目 = temp4.科目(+))