表数据如下
姓名 科目 分数
赵一 语文 100
赵一 数学 90
赵一 英语 97
钱二 语文 100
钱二 数学 90查询结果
姓名 科目 参加考试科目数 序号
赵一 语文 3 1
赵一 数学 3 2
赵一 英语 3 3
钱二 语文 2 1
钱二 数学 2 2
姓名 科目 分数
赵一 语文 100
赵一 数学 90
赵一 英语 97
钱二 语文 100
钱二 数学 90查询结果
姓名 科目 参加考试科目数 序号
赵一 语文 3 1
赵一 数学 3 2
赵一 英语 3 3
钱二 语文 2 1
钱二 数学 2 2
(sname varchar2(10),
subject varchar2(10),
score number(3));
select sname,subject,count(*)over(partition by sname),row_number()over(partition by sname order by rowid)
from tt
这样可以,但还有更好的
SNAME SUBJECT SCORE
---------- ---------- -----
赵一 语文 100
赵一 数学 90
赵一 英语 97
钱二 语文 100
钱二 数学 90
SQL>
SQL> select sname,subject,count(*)over(partition by sname),row_number()over(partition by sname order by rowid )
2 from tt
3 order by rowid asc
4 ;
SNAME SUBJECT COUNT(*)OVER(PARTITIONBYSNAME) ROW_NUMBER()OVER(PARTITIONBYSN
---------- ---------- ------------------------------ ------------------------------
赵一 语文 3 1
赵一 数学 3 2
赵一 英语 3 3
钱二 语文 2 1
钱二 数学 2 2
SQL>
row_number() over(partition by 姓名,科目 order by 分数 desc) 序号
from tb
select a.姓名,a.科目,(select count(1) from tb b where a.姓名=b.姓名),
row_number()over(partition by 姓名 order by 科目)
from tb a
from tt
order by rowid asc这种功能当然可以了