版权声明:本文为博主原创文章,未经博主允许不得转载。 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 ....