協助 MySQL 實現 Oracle 高階分析函式
閱讀原文:http://c.raqsoft.com.cn/article/1535964014661?r=alice
Oracle 支援一些獨特的語法和函式,在移植到 MySQL 上時或多或少給程式設計師造成了困擾,下面我們針對 Oracle 的一些特殊用法舉例並講解如何用集算器來完成同樣功能。這些方法當然也不限於針對 MySQL,對於所有其它資料庫也能支援。
1、 遞迴語句
a) select employee_id,first_name,last_name,manager_id
from hr.employees
start with employee_id=102
connect by prior employee_id = manager_id
A |
|
1 |
=connect("orcl") |
2 |
[email protected]("select employee_id, first_name, last_name, manager_id from hr.employees") |
3 |
=A2.keys(EMPLOYEE_ID) |
4 |
[email protected](EMPLOYEE_ID==102) |
5 |
=A2.switch(MANAGER_ID, A2) |
6 |
=A2.nodes(MANAGER_ID, A4) |
7 |
=(A4|A6).new(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, MANAGER_ID.EMPLOYEE_ID:MANAGER_ID) |
(1) A3 設定序表 A2 的鍵
(2) A4 選取起始僱員
(3) A5 將 A2 中 MANAGER_ID 值轉換成記錄,以便遞迴
(4) A6 獲取起始僱員的所有子節點
b) select employee_id, first_name,last_name,manager_id
from hr.employees
start with employee_id=104
connect by prior manager_id = employee_id
A |
|
1 |
=connect("orcl") |
2 |
[email protected]("select employee_id, first_name, last_name, manager_id from hr.employees") |
3 |
=A2.keys(EMPLOYEE_ID) |
4 |
=A2.switch(MANAGER_ID, A2) |
5 |
[email protected](EMPLOYEE_ID==104) |
6 |
=A5.prior(MANAGER_ID) |
7 |
=A6.new(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, MANAGER_ID.EMPLOYEE_ID:MANAGER_ID) |
聚集分析函式和巢狀聚集函式,多重分組使用方式可閱讀原文:http://c.raqsoft.com.cn/article/1535964014661?r=alice