oracle查询题目,1按照birth排序 2取前20条数据 3person_no为009的记录,排在第一位

有一个表:person

id    name    birth              person_no

XX   James   1987/01/01    001

YY   Tom     1981/12/23    009

··· ···

要求1:

1按照birth排序

2取前20条数据

sql查询语句:

select t1.* from 

(select t.*,ROW_NUMBER() OVER( ORDER BY t.birth DESC) AS ROWNUMBER  from person t)t1

 where t1.ROWNUMBER<=20


主要是一个ROW_NUMBER()  OVER(ORDER BY ···)函数,OVER函数里还可以进行分组内排序:

分组内排序:


不分组排序:


要求2:

1按照birth排序

2取前20条数据

3person_no为009的记录,排在第一位

sql查询语句:

select t1.* from 

(select t.*,ROW_NUMBER() OVERORDER BY t.birth DESC) AS ROWNUMBER  from person t)t1

 where t1.ROWNUMBER<=20 and t.person_no='009'

union all      --注意不能用union,如果用union会将联合后的结果集重新排序,这样009这个就不会排在第一个了

select t1.* from 

(select t.*,ROW_NUMBER() OVERORDER BY t.birth DESC) AS ROWNUMBER  from person t)t1

 where t1.ROWNUMBER<=20 and t.person_no!='009'



猜你喜欢

转载自blog.csdn.net/Ideality_hunter/article/details/80597178