全部產品
Search
文件中心

PolarDB:對同級排序

更新時間:Jul 06, 2024

通過使用 ORDER SIBLINGS BY 子句,可對結果集進行排序,以便按所選列值的升序或降序顯示同級。這是 ORDER BY 子句的特例,只能用於分層查詢。

上一查詢進行了進一步修改,新增了 ORDER SIBLINGS BY ename ASC。

SELECT LEVEL, LPAD (' ', 2 * (LEVEL - 1)) || ename "employee", empno, mgr
FROM emp START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr
ORDER SIBLINGS BY ename ASC;

上一查詢的輸出現在也進行了修改,因此同級按名稱的升序顯示。同級 BLAKE、CLARK 和 JONES 現在按字母順序排在 KING 下方。同級 ALLEN、JAMES、MARTIN、TURNER 和 WARD 按字母順序排在 BLAKE 下方,依此類推。

 level |  employee   | empno | mgr
-------+-------------+-------+------
     1 | KING        |  7839 |
     2 |   BLAKE     |  7698 | 7839
     3 |     ALLEN   |  7499 | 7698
     3 |     JAMES   |  7900 | 7698
     3 |     MARTIN  |  7654 | 7698
     3 |     TURNER  |  7844 | 7698
     3 |     WARD    |  7521 | 7698
     2 |   CLARK     |  7782 | 7839
     3 |     MILLER  |  7934 | 7782
     2 |   JONES     |  7566 | 7839
     3 |     FORD    |  7902 | 7566
     4 |       SMITH |  7369 | 7902
     3 |     SCOTT   |  7788 | 7566
     4 |       ADAMS |  7876 | 7788
(14 rows)

以下最後一個樣本新增了 WHERE 子句並以三個根節點開頭。在構造節點樹後,WHERE 子句會篩選樹中的行以構成結果集。

SELECT LEVEL, LPAD (' ', 2 * (LEVEL - 1)) || ename "employee", empno, mgr
FROM emp WHERE mgr IN (7839, 7782, 7902, 7788)
START WITH ename IN ('BLAKE','CLARK','JONES')
CONNECT BY PRIOR empno = mgr
ORDER SIBLINGS BY ename ASC;

該查詢的輸出顯示三個根節點(層級一):BLAKE、CLARK 和 JONES。此外,還從輸出中消除了不符合 WHERE 子句的行。

 level | employee  | empno | mgr
-------+-----------+-------+------
     1 | BLAKE     |  7698 | 7839
     1 | CLARK     |  7782 | 7839
     2 |   MILLER  |  7934 | 7782
     1 | JONES     |  7566 | 7839
     3 |     SMITH |  7369 | 7902
     3 |     ADAMS |  7876 | 7788
(6 rows)