问题描述
我有一个包含工作、薪水和日期列的表格。我正在用 PL/sql 编写以下查询,但出现错误
此处不允许使用群组功能
delete employees where date = '06-05-2020 'and avg (salary)> 5500;
我该如何解决这个问题?
解决方法
您的查询毫无意义(至少对我而言)。 平均工资代表什么? 谁的平均工资?
这是一个基于 Scott 的 EMP
表的示例;我将删除 1981 年 12 月 3 日入职的员工,并在员工平均工资高于 2000 的部门工作。
示例数据:
SQL> select deptno,ename,sal,hiredate from emp order by deptno,ename;
DEPTNO ENAME SAL HIREDATE
---------- ---------- ---------- ----------
20 ADAMS 1100 12.01.1983
20 FORD 3000 03.12.1981 --> this
20 JONES 2975 02.04.1981
20 SCOTT 3000 09.12.1982
20 SMITH 800 17.12.1980
30 ALLEN 1600 20.02.1981
30 BLAKE 2850 01.05.1981
30 JAMES 950 03.12.1981 --> this
30 MARTIN 1250 28.09.1981
30 TURNER 1500 08.09.1981
30 WARD 1250 22.02.1981
11 rows selected.
每个部门的平均工资:
SQL> select deptno,avg(sal) avg_salary
2 from emp
3 group by deptno
4 order by avg_salary desc;
DEPTNO AVG_SALARY
---------- ----------
20 2175 --> higher than 2000
30 1566,66667
所以:我正在寻找在部门 20 工作的员工(因为只有该部门的平均工资高于 2000)并且在 1981 年 12 月 3 日被聘用(James 和 Ford,但只有福特在第 20 部门工作):
SQL> delete from emp
2 where hiredate = date '1981-12-03'
3 and deptno in (select deptno
4 from emp
5 group by deptno
6 having avg(sal) > 2000
7 );
1 row deleted.
福特还在那里吗?
SQL> select * From emp where ename = 'FORD';
no rows selected
SQL>
不,已删除。
现在轮到你了。