表结构是这样的id name item score
1 'a' 1 20
2 'a' 2 20
3 'a' 3 10
4 'b' 1 15
5 'b' 2 25
6 'b' 3 30
7 'c' 1 25
8 'c' 2 10
9 'c' 3 20每个人 name 对应的 item 包括 1,2,3 三个固定的项。score是他们的得分。要求是每个人name三项的记录由3,2,1降序排序组成一组,但是每个人某个项目(这里为3)的得分要由高到低排序结果如下6 'b' 3 30
5 'b' 2 25
4 'b' 1 159 'c' 3 20
8 'c' 2 10
7 'c' 1 253 'a' 3 10
2 'a' 2 20
1 'a' 1 20
'b'第三项的得分30最高,所以b这一组数据排在最前面。'c'次之,'a'最后。但他们各自的数据由3,2,1降序组织。我这样说清楚了吗?请问怎么写这个查询排序语句?
1 'a' 1 20
2 'a' 2 20
3 'a' 3 10
4 'b' 1 15
5 'b' 2 25
6 'b' 3 30
7 'c' 1 25
8 'c' 2 10
9 'c' 3 20每个人 name 对应的 item 包括 1,2,3 三个固定的项。score是他们的得分。要求是每个人name三项的记录由3,2,1降序排序组成一组,但是每个人某个项目(这里为3)的得分要由高到低排序结果如下6 'b' 3 30
5 'b' 2 25
4 'b' 1 159 'c' 3 20
8 'c' 2 10
7 'c' 1 253 'a' 3 10
2 'a' 2 20
1 'a' 1 20
'b'第三项的得分30最高,所以b这一组数据排在最前面。'c'次之,'a'最后。但他们各自的数据由3,2,1降序组织。我这样说清楚了吗?请问怎么写这个查询排序语句?
解决方案 »
- 有什么工具能批量生成CTL文件
- orcle 9i 求助
- 如何在navigator 中创建匿名块?
- 出生日期 系统时间
- sql语句查询
- 对oracle感兴趣的请进!(综合应用)
- 请问能不能用某字段的一部分来group by啊?
- *** 紧急求助:熟悉ERP/MRPII(尤其是 Oracle Application R11i)接口的哥们进来指点一二 ***
- 各位大虾,数据导入的问题。
- 我启动oracle数据库用svrmgrl,connect internal,他怎么提示要密码啊,我输了oracle,他报用户名或密码错误,怎么会事?
- blob类型存储过程,调用时存储过程出错?
- 关于oracle日期转换的问题
FROM test_a b,
(SELECT NAME, ROWNUM a_rownum
FROM (SELECT NAME
FROM test_a
GROUP BY NAME
ORDER BY MAX (score) DESC)) awhere a.name=b.name
order by a_rownum,item desc
select id,name,item,score
from
(select a.id ,a.name,a.item,a.score,b.rn
from a,
select ( name,
row_number() over(partition name order by score desc) rn
from a
where item= 3
) b
where a.name=b.name
order by b.rn,a.item desc)
---oracle 测试代码如下:create table test_a(id number,name varchar2(4),item number,score number);insert into test_a values(1, 'a' , 1, 20);
insert into test_a values(2, 'a' , 2, 20);
insert into test_a values(3, 'a', 3, 10);
insert into test_a values(4, 'b', 1, 15);
insert into test_a values(5, 'b', 2, 25);
insert into test_a values(6, 'b', 3, 30);
insert into test_a values(7, 'c', 1, 25);
insert into test_a values(8, 'c', 2, 10);
insert into test_a values(9, 'c', 3, 20); commit;SELECT ID, b.NAME, item, score
FROM test_a b,
(SELECT NAME, ROWNUM a_rownum
FROM (SELECT NAME
FROM test_a
GROUP BY NAME
ORDER BY MAX (score) DESC)) a where a.name=b.name
order by a.a_rownum,item desc ;drop table test_a;