我有一個 SQL 資料庫,其中有兩個名為 DEPT 和 EMP 的表
create table dept(
deptno number(2,0),
dname varchar2(14),
loc varchar2(13),
constraint pk_dept primary key (deptno)
);
create table emp(
empno number(4,0),
ename varchar2(10),
job varchar2(9),
mgr number(4,0),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2,0),
constraint pk_emp primary key (empno),
constraint fk_deptno foreign key (deptno) references dept (deptno)
);
需要做的事情如下:
- 部門位置
- 公司平均工資
- 部門平均工資
- 偏離部門平均工資
- 偏離公司平均工資
- EMPNo
- 作業
- 薪水
這是我到目前為止準備好的
SELECT ROUND(AVG(sal) over(),2) AS COMPANY_AVERAGE_SALARY,sal - ROUND(AVG(sal) over(),2) AS DEVIATION_FROM_COMPANY_AVERAGE_SALARY, empno AS EMPNO, job AS JOB, sal AS SALARY from emp;
我也有:
SELECT dept.loc AS DEPARTMENT_LOCATION FROM emp,dept WHERE emp.deptno=Dept.deptno;
我的主要問題是我似乎無法讓不同的選擇行顯示在同一輸出中,并且不知道如何讓部門平均工資顯示在每行以及如何執行 DEVIATION_FROM_DEPARTMENT_AVERAGE_SALARY 非常感謝您的幫助。
uj5u.com熱心網友回復:
您與示例查詢非常接近。要找到偏差,您只需要找到當前員工工資與公司/部門平均工資之間的差異,如下所示:
SELECT d.loc
AS department_location,
ROUND (AVG (sal) OVER (), 2)
AS company_average_salary,
ROUND (AVG (sal) OVER (PARTITION BY e.deptno), 2)
AS dept_average_salary,
ROUND (sal - AVG (sal) OVER (PARTITION BY e.deptno), 2)
AS dept_salary_deviation,
ROUND (sal - AVG (sal) OVER (), 2)
AS company_salary_deviation,
e.empno,
e.job,
e.sal
FROM emp e LEFT JOIN dept d ON (e.deptno = d.deptno);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/529788.html
標籤:sql甲骨文
