帮助写条sql 怎么得到工资大于自己部门平均工资的员工信息,表是系统的emp表??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select * from emp e where e.salary >= (select avg(salary) from emp p where p.empno=e.empno group by deptid) 已写入 file afiedt.buf 1 select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) t 2* where t.deptno=emp.deptno and emp.sal>t.avgsalscott@YPCOST> / EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO AVGSAL---------- ---------- --------- ---------- ------------------- ---------- ---------- ---------- ---- 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30 30 1566.66667 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30 30 1566.66667 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 900 20 20 2175 7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 900 20 20 2175 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 900 20 20 2175 7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10 10 2916.66667已选择6行。 select *from tmp kwhere salary >(select avg(salary) FROM tmp where k.dep=dep) select em.name,em.salaryfrom (select e.name,e.salary,avg(e.salary) over(partition by e.deptno) avg_sal from emp e) emwhere em.salary>avg_sal scott@YPCOST> select * from emp t where sal>(select avg(sal) from emp where t.deptno=deptno); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- ------------------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 900 20 7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 900 20 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 900 20 7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10已选择6行。 问楼上where em.salary>avg_sal 这里为什么不可以用where em.salary>e.avg_sal 我改成e.avg_sal 会报错啊 问7楼where em.salary>avg_sal 这里为什么不可以用where em.salary>e.avg_sal 我改成e.avg_sal 会报错啊 能说的详细一点吗?是作用域的问题但是在外层用到avg_sal不是应该加上别名吗??? where em.salary>avg_sal 这么写实对的可是我这样where em.salary>e.avg_sal 就错了因该注意什么啊??? 13楼改成你说的那样不对啊where em.salary>em.avg_sal select *from emp twhere sal>(select avg(sal) FROM emp where t.dep=dep)6楼这种写法简洁一些 where em.salary>em.avg_sal 这个可不会错的,我都试过了可以的,你再看看其他地方是不是弄错了,呵呵! 这么多的人回复select * from emp a where a.sal>(select avg(sal) from emp b where a.deptno=b.deptno) oracle 分页过程超慢。直接SQL N快,怎么回事 DATE字段 取出到VARCHAR2,时分秒丢失的问题 初学者需求:oracle教程 Oracle 中使用insert 语句插入中文数据 提交后出现乱码. 求一简单的sql语句 新手入门 前辈可否介绍些经典教材 Apache日志问题 在2003系统上安装完成oracle9i2, 但运行程序时说,没有客户端和网络组件,但服务名和监听已有,且监听服务已启动... oracle中如何实现主键的自动增加? 会者不难,马上结贴 请教这样的SQL怎么写呢? 如何在oracle包中一次写入多张图片
已写入 file afiedt.buf 1 select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) t
2* where t.deptno=emp.deptno and emp.sal>t.avgsal
scott@YPCOST> / EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO AVGSAL
---------- ---------- --------- ---------- ------------------- ---------- ---------- ---------- ----
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30 30 1566.66667
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30 30 1566.66667
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 900 20 20 2175
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 900 20 20 2175
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 900 20 20 2175
7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10 10 2916.66667已选择6行。
from tmp k
where salary >(select avg(salary) FROM tmp where k.dep=dep)
from
(select e.name,e.salary,avg(e.salary) over(partition by e.deptno) avg_sal from emp e
) em
where em.salary>avg_sal
scott@YPCOST> select * from emp t where sal>(select avg(sal) from emp where t.deptno=deptno); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 900 20
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 900 20
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 900 20
7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10已选择6行。
我改成e.avg_sal 会报错啊
我改成e.avg_sal 会报错啊
是作用域的问题
但是在外层用到avg_sal不是应该加上别名吗???
where em.salary>avg_sal 这么写实对的
可是我这样where em.salary>e.avg_sal
就错了
因该注意什么啊???
改成你说的那样不对啊
where em.salary>em.avg_sal
from emp t
where sal>(select avg(sal) FROM emp where t.dep=dep)6楼这种写法简洁一些
这么多的人回复select * from emp a where a.sal>(select avg(sal) from emp b where a.deptno=b.deptno)