分析函數


--分析函數

--Partition by,按相應的值(manager_id)進行分組統計
SELECT
MANAGER_ID,
FIRST_NAME||' '||LAST_NAME EMPLOYEE_NAME,
HIRE_DATE,
SALARY,
AVG(SALARY) OVER (PARTITION BY MANAGER_ID) AVG_SALARY--按manager_id(101,102,103)每組算出平均值
FROM HR.EMPLOYEES WHERE MANAGER_ID IN(101,102,103)--只求manager_id(101,102,103)三組的值

--等同於上面
SELECT A.MANAGER_ID, A.EMPLOYEE_NAME, A.HIRE_DATE, A.SALARY, B.AVG_SALARY
FROM (SELECT MANAGER_ID,
FIRST_NAME || ' ' || LAST_NAME EMPLOYEE_NAME,
HIRE_DATE,
SALARY
FROM HR.EMPLOYEES) A,
(SELECT MANAGER_ID, AVG(SALARY) AVG_SALARY
FROM HR.EMPLOYEES
GROUP BY MANAGER_ID) B--B表是求出每個MANAGER_ID薪酬的平均工資
WHERE A.MANAGER_ID = B.MANAGER_ID
AND A.MANAGER_ID IN(101,102,103)
ORDER BY A.MANAGER_ID

--Order by 按相應的值(hire_date)進行排序並累計統計
SELECT MANAGER_ID,
FIRST_NAME || ' ' || LAST_NAME EMPLOYEE_NAME,
HIRE_DATE,
SALARY,
AVG(SALARY) OVER( ORDER BY HIRE_DATE) AVG_SALARY
FROM HR.EMPLOYEES
WHERE MANAGER_ID IN (101, 102, 103) --只求MANAGER_ID(101,102,103)三組的值

--Partition by Order by 首先按相應的值(manager_id,hire_date)排序,並按 order by 的值(hire_date)進行累計統計
SELECT MANAGER_ID,
FIRST_NAME || ' ' || LAST_NAME EMPLOYEE_NAME,
HIRE_DATE,
SALARY,
AVG(SALARY) OVER(PARTITION BY MANAGER_ID ORDER BY HIRE_DATE) AVG_SALARY
FROM HR.EMPLOYEES
WHERE MANAGER_ID IN (101, 102, 103) --只求MANAGER_ID(101,102,103)三組的值



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章