数据库关于partition by用于分组排序总结

1.row_number() over(order by id) as row; 对全部结果集进行排序
实例:
SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (ORDER BY salary desc) rank FROM employee;
• 000010 A00 152750 1
• 000030 C01 98250 2
• 000070 D21 96170 3
• 000020 B01 94250 4
• 000090 E11 89750 5
• 000100 E21 86150 6
• 000050 E01 80175 7
• 000130 C01 73800 8
• 000060 D11 72250 9


2.partition by 用于给结果集分组
row_number() over(partition by time order by id) as row;
实例:
SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (partition by workdept ORDER BY salary desc) rank FROM employee
• --------------------------------------
• 000010 A00 152750 1
• 000110 A00 66500 2
• 000120 A00 49250 3
• 200010 A00 46500 4
• 200120 A00 39250 5
• 000020 B01 94250 1
• 000030 C01 98250 1
• 000130 C01 73800 2

3.rank() over()是跳跃排序,有两个第二名时接下来就是第四名
select workdept,salary,rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept;
• ------------------
• A00 39250 1
• A00 46500 2
• A00 49250 3
• A00 66500 4
• A00 152750 5
• B01 94250 1
• C01 68420 1
• C01 68420 1
• C01 73800 3

4.dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。
select workdept,salary,dense_rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept;
• ------------------
• A00 39250 1
• A00 46500 2
• A00 49250 3
• A00 66500 4
• A00 152750 5
• B01 94250 1
• C01 68420 1
• C01 68420 1
• C01 73800 2
• C01 98250 3
5.--总结group by语句(分组的内容可以显示在列表中)
--1.select后可以跟聚合函数或分组字段
--2.where语句后不可以跟聚合函数可以跟其他字段
--3.having 语句后常跟聚合函数,也可以跟聚合字段
--4.where,group by,having三者同时存在按照以上顺序写
select ename ,MAX(SAL) from EMP
group by ENAME
having MAX(SAL)>1500

 

posted @ 2021-12-02 15:07  5miyuan  阅读(612)  评论(0)    收藏  举报