聚合函数和SYS_CONNECT_BY_PATH?

Agregate functions and SYS_CONNECT_BY_PATH?

我正在处理一些查询,并且到了我想要输出某个经理管理下的员工平均工资的地步。我发现,如果我使用 AVG,路径不会显示。

SYS_CONNECT_BY_PATH 不适用于聚合函数,对吗?

您可以聚合数值,并且可以通过 SYS_CONNECT_BY_PATH:

与分层查询一起进行

例如:

SELECT CONNECT_BY_ROOT( name ) AS top_manager,
       SUBSTR( SYS_CONNECT_BY_PATH( name, ' -> ' ), 5 ) AS management_chain,
       salary,
       AVG( salary ) OVER ( PARTITION BY CONNECT_BY_ROOT( id ) ) AS avg_salary
FROM   employees
START WITH id = 1
CONNECT BY PRIOR id = manager_id

其中,对于示例数据:

CREATE TABLE employees ( id, name, manager_id, salary ) AS
SELECT 1, 'Alice', NULL, 20 FROM DUAL UNION ALL
SELECT 2, 'Betty', 1,    15 FROM DUAL UNION ALL
SELECT 3, 'Carol', 2,    10 FROM DUAL UNION ALL
SELECT 4, 'Darby', 1,    10 FROM DUAL UNION ALL
SELECT 5, 'Ellen', 4,    25 FROM DUAL UNION ALL
SELECT 6, 'Fiona', NULL,  5 FROM DUAL;

输出:

TOP_MANAGER | MANAGEMENT_CHAIN        | SALARY | AVG_SALARY
:---------- | :---------------------- | -----: | ---------:
Alice       | Alice                   |     20 |         16
Alice       | Alice -> Betty          |     15 |         16
Alice       | Alice -> Darby -> Ellen |     25 |         16
Alice       | Alice -> Darby          |     10 |         16
Alice       | Alice -> Betty -> Carol |     10 |         16

db<>fiddle here