1. 程式人生 > 其它 >資料庫關於partition by用於分組排序總結

資料庫關於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