帮助写条sql

ANN521029 2010-12-11 12:19:08
怎么得到工资大于自己部门平均工资的员工信息,表是系统的emp表???
...全文
132 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-12-11
  • 打赏
  • 举报
回复
em.avg_sal
YY_MM_DD 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ann521029 的回复:]
问7楼

where em.salary>avg_sal 这里为什么不可以用where em.salary>e.avg_sal
我改成e.avg_sal 会报错啊
[/Quote]
作用域问题。。。
「已注销」 2010-12-11
  • 打赏
  • 举报
回复
em为视图的别名啊
ANN521029 2010-12-11
  • 打赏
  • 举报
回复
问7楼

where em.salary>avg_sal 这里为什么不可以用where em.salary>e.avg_sal
我改成e.avg_sal 会报错啊
ANN521029 2010-12-11
  • 打赏
  • 举报
回复
问楼上

where em.salary>avg_sal 这里为什么不可以用where em.salary>e.avg_sal
我改成e.avg_sal 会报错啊
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ann521029 的回复:]
除了楼上的写法还有别的吗??
[/Quote]

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行。
「已注销」 2010-12-11
  • 打赏
  • 举报
回复
select em.name,em.salary
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
feixianxxx 2010-12-11
  • 打赏
  • 举报
回复
select *
from tmp k
where salary >(select avg(salary) FROM tmp where k.dep=dep)
ANN521029 2010-12-11
  • 打赏
  • 举报
回复
除了楼上的写法还有别的吗??
  • 打赏
  • 举报
回复

已写入 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行。
YY_MM_DD 2010-12-11
  • 打赏
  • 举报
回复
不对。。。呵呵。。。写错了。。。懒得写了。。。
YY_MM_DD 2010-12-11
  • 打赏
  • 举报
回复
select * from emp e where e.salary >= (select avg(salary) from emp p where p.empno=e.empno group by deptid)
YY_MM_DD 2010-12-11
  • 打赏
  • 举报
回复
心中的彩虹 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 ann521029 的回复:]
怎么得到工资大于自己部门平均工资的员工信息,表是系统的emp表???
[/Quote]

这么多的人回复



select * from emp a where a.sal>(select avg(sal) from emp b where a.deptno=b.deptno)




「已注销」 2010-12-11
  • 打赏
  • 举报
回复
where em.salary>em.avg_sal 这个可不会错的,我都试过了可以的,你再看看其他地方是不是弄错了,呵呵!
tangren 2010-12-11
  • 打赏
  • 举报
回复
select *
from emp t
where sal>(select avg(sal) FROM emp where t.dep=dep)


6楼这种写法简洁一些
ANN521029 2010-12-11
  • 打赏
  • 举报
回复
13楼
改成你说的那样不对啊
where em.salary>em.avg_sal
ANN521029 2010-12-11
  • 打赏
  • 举报
回复
能说的详细一点吗?
是作用域的问题
但是在外层用到avg_sal不是应该加上别名吗???
where em.salary>avg_sal 这么写实对的
可是我这样where em.salary>e.avg_sal
就错了
因该注意什么啊???

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧