Oracle 小技巧

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012442381/article/details/77141834

1.分组排序

--0.group by 与 order by desc

select user_id from employee  order by salary; -- 全部数据排序

select user_id  from employee  group by user_id order by salary; --获取组内最小的进行排序

--1查询语句使用排序过滤重复

select distinct user_id from employee  order by salary;

--2.函数row_number() over (partition by xxx1 order by xxx2) 按xxx1分组,然后组内按xxx2排序

 场景1.电子流审批历史查询

 场景2:分页查询row_number() over (order by xxx2) 按照xxx2排序

--3函数rank()  over (partition by xxx1 order by xxx2) 按xxx1分组,然后组内按xxx2排序

    与row_number区别是如:rank在排序中并列第三,那么下个数就是第五--所以称跳跃排序

--4函数dense_rank()  over (partition by xxx1 order by xxx2) 按xxx1分组,然后组内按xxx2排序

    与rank区别是如:dense_rank在排序中并列名次,不会跳跃,如:1,1,2,2,3

场景:排名次

2 分页

--1 .简单分页

select * 
 from (select distinct T.salary ,rownum as RN 
         from employee T where rownum <3) TT 
where TT.RN >0 

--2 .排序分页

select * 
  from (select T.salary ,row_number() over(order by T.salary desc) as RN
          from employee T) TT
 where TT.RN >0 and TT.Rn <3

--3 .排序去重分页

select * 
 from (select distinct T.salary ,dense_rank() over(order by T.salary desc) as RN
        from employee T) TT 
where TT.RN > 0 and TT.Rn <3

3 . 临时表

规则:

WITH query1 AS (SELECT * FOM ...WHERE ...),
     query2 AS (SELECT * FOM ...WHERE ...)
SELECT * 
  FROM query1,query2
 WHERE ....

猜你喜欢

转载自blog.csdn.net/u012442381/article/details/77141834