在相关子查询中,父查询如何获得子查询的结果

wlwyangt 2015-08-06 08:38:38
使用相关子查询,来查找所有其薪水多于他所在部门的平均薪水的雇员,显示名字、部门号和部门的平均薪水,按平均薪水排序。
这里的emp表 是Oracle自带的那个表,

这个事使用其他方法的答案
Select e1.ename,e1.deptno,e1.sal,e2.avgsal
From emp e1,(Select deptno, Avg(sal) avgsal From emp Group By deptno)e2
Where e1.deptno=e2.deptno
And e1.sal>e2.avgsal
而使用相关子查询
Select e.ename,deptno
From emp e
Where exist sal>(Select Avg(sal)From emp Where deptno=e.deptno And e.sal>Avg(sal));
这里我就没法获得部门的平均薪水,请问大神们类此这样的问题,父查询语句怎样获得子查询的结果呢
...全文
488 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongshao1943 2015-08-13
  • 打赏
  • 举报
回复
引用 9 楼 u014516074 的回复:
[quote=引用 8 楼 xiongshao1943 的回复:] [quote=引用 7 楼 xiongshao1943 的回复:] [quote=引用 6 楼 u014516074 的回复:] [quote=引用 5 楼 xiongshao1943 的回复:] 可以采用分析函数吧

SELECT * FROM
(
Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1
)
WHERE sal>avgsal
ENAME DEPTNO SAL AVGSAL 1 KING 10 5000.00 2916.66666666667 2 JONES 20 2975.00 2175 3 FORD 20 3000.00 2175 4 SCOTT 20 3000.00 2175 5 ALLEN 30 1600.00 1566.66666666667 6 BLAKE 30 2850.00 1566.66666666667
如果这一题仅限定使用相关子查询来解呢,,使用其他的方法做了出来,这个是在一份资料上看到的题,仅仅限定于使用相关子查询做,[/quote]

Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1 
WHERE sal>( SELECT  Avg(sal)From scott.emp Where deptno=e1.deptno)
ENAME DEPTNO SAL AVGSAL 1 10 5000.00 5000 2 JONES 20 2975.00 2991.66666666667 3 SCOTT 20 3000.00 2991.66666666667 4 FORD 20 3000.00 2991.66666666667 5 ALLEN 30 1600.00 2225 6 BLAKE 30 2850.00 2225 [/quote] 晕,发现数据不对,不好意思[/quote] 已经可以了,赞[/quote] 我发现这个AVGSAL的是大于平均薪资的员工的平均薪资,而不是一整个部门的薪资,朋友你要确定清楚,数据一定要对啊
wlwyangt 2015-08-12
  • 打赏
  • 举报
回复
引用 8 楼 xiongshao1943 的回复:
[quote=引用 7 楼 xiongshao1943 的回复:] [quote=引用 6 楼 u014516074 的回复:] [quote=引用 5 楼 xiongshao1943 的回复:] 可以采用分析函数吧

SELECT * FROM
(
Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1
)
WHERE sal>avgsal
ENAME DEPTNO SAL AVGSAL 1 KING 10 5000.00 2916.66666666667 2 JONES 20 2975.00 2175 3 FORD 20 3000.00 2175 4 SCOTT 20 3000.00 2175 5 ALLEN 30 1600.00 1566.66666666667 6 BLAKE 30 2850.00 1566.66666666667
如果这一题仅限定使用相关子查询来解呢,,使用其他的方法做了出来,这个是在一份资料上看到的题,仅仅限定于使用相关子查询做,[/quote]

Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1 
WHERE sal>( SELECT  Avg(sal)From scott.emp Where deptno=e1.deptno)
ENAME DEPTNO SAL AVGSAL 1 10 5000.00 5000 2 JONES 20 2975.00 2991.66666666667 3 SCOTT 20 3000.00 2991.66666666667 4 FORD 20 3000.00 2991.66666666667 5 ALLEN 30 1600.00 2225 6 BLAKE 30 2850.00 2225 [/quote] 晕,发现数据不对,不好意思[/quote] 已经可以了,赞
xiongshao1943 2015-08-11
  • 打赏
  • 举报
回复
引用 7 楼 xiongshao1943 的回复:
[quote=引用 6 楼 u014516074 的回复:] [quote=引用 5 楼 xiongshao1943 的回复:] 可以采用分析函数吧

SELECT * FROM
(
Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1
)
WHERE sal>avgsal
ENAME DEPTNO SAL AVGSAL 1 KING 10 5000.00 2916.66666666667 2 JONES 20 2975.00 2175 3 FORD 20 3000.00 2175 4 SCOTT 20 3000.00 2175 5 ALLEN 30 1600.00 1566.66666666667 6 BLAKE 30 2850.00 1566.66666666667
如果这一题仅限定使用相关子查询来解呢,,使用其他的方法做了出来,这个是在一份资料上看到的题,仅仅限定于使用相关子查询做,[/quote]

Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1 
WHERE sal>( SELECT  Avg(sal)From scott.emp Where deptno=e1.deptno)
ENAME DEPTNO SAL AVGSAL 1 10 5000.00 5000 2 JONES 20 2975.00 2991.66666666667 3 SCOTT 20 3000.00 2991.66666666667 4 FORD 20 3000.00 2991.66666666667 5 ALLEN 30 1600.00 2225 6 BLAKE 30 2850.00 2225 [/quote] 晕,发现数据不对,不好意思
xiongshao1943 2015-08-11
  • 打赏
  • 举报
回复
引用 6 楼 u014516074 的回复:
[quote=引用 5 楼 xiongshao1943 的回复:] 可以采用分析函数吧

SELECT * FROM
(
Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1
)
WHERE sal>avgsal
ENAME DEPTNO SAL AVGSAL 1 KING 10 5000.00 2916.66666666667 2 JONES 20 2975.00 2175 3 FORD 20 3000.00 2175 4 SCOTT 20 3000.00 2175 5 ALLEN 30 1600.00 1566.66666666667 6 BLAKE 30 2850.00 1566.66666666667
如果这一题仅限定使用相关子查询来解呢,,使用其他的方法做了出来,这个是在一份资料上看到的题,仅仅限定于使用相关子查询做,[/quote]

Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1 
WHERE sal>( SELECT  Avg(sal)From scott.emp Where deptno=e1.deptno)
ENAME DEPTNO SAL AVGSAL 1 10 5000.00 5000 2 JONES 20 2975.00 2991.66666666667 3 SCOTT 20 3000.00 2991.66666666667 4 FORD 20 3000.00 2991.66666666667 5 ALLEN 30 1600.00 2225 6 BLAKE 30 2850.00 2225
xiongshao1943 2015-08-10
  • 打赏
  • 举报
回复
可以采用分析函数吧

SELECT * FROM
(
Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1
)
WHERE sal>avgsal
ENAME DEPTNO SAL AVGSAL 1 KING 10 5000.00 2916.66666666667 2 JONES 20 2975.00 2175 3 FORD 20 3000.00 2175 4 SCOTT 20 3000.00 2175 5 ALLEN 30 1600.00 1566.66666666667 6 BLAKE 30 2850.00 1566.66666666667
wlwyangt 2015-08-10
  • 打赏
  • 举报
回复
引用 5 楼 xiongshao1943 的回复:
可以采用分析函数吧

SELECT * FROM
(
Select e1.ename,e1.deptno,e1.sal,avg(sal) OVER(PARTITION BY deptno) avgsal
From scott.emp e1
)
WHERE sal>avgsal
ENAME DEPTNO SAL AVGSAL 1 KING 10 5000.00 2916.66666666667 2 JONES 20 2975.00 2175 3 FORD 20 3000.00 2175 4 SCOTT 20 3000.00 2175 5 ALLEN 30 1600.00 1566.66666666667 6 BLAKE 30 2850.00 1566.66666666667
如果这一题仅限定使用相关子查询来解呢,,使用其他的方法做了出来,这个是在一份资料上看到的题,仅仅限定于使用相关子查询做,
wlwyangt 2015-08-09
  • 打赏
  • 举报
回复
我写的那个子查询发错了,
Select e.ename,deptno
From emp e
Where sal>(Select Avg(sal)From emp Where deptno=e.deptno Having e.sal>Avg(sal))
wlwyangt 2015-08-09
  • 打赏
  • 举报
回复
引用 2 楼 mayanzs 的回复:

Select e.ename,deptno
From emp e
Where exist sal>(Select distinct Avg(sal) over(partition by deptno) From emp Where deptno=e.deptno);
这里不是我想要的查询,我需要的是父查询得到那个子查询语句里的平均工资,
mayanzs 2015-08-07
  • 打赏
  • 举报
回复

Select e.ename,deptno
From emp e
Where exist sal>(Select distinct Avg(sal) over(partition by deptno) From emp Where deptno=e.deptno);
mayanzs 2015-08-07
  • 打赏
  • 举报
回复

Select e.ename,deptno
From emp e
Where exist sal>(Select distinct Avg(sal) (partition by deptno) From emp Where deptno=e.deptno);

17,082

社区成员

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

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