为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle高级查询

同时求部门号, 提示‘不是单组分组函数’
2. 查询工资比30号部门任意一个员工低的员工信息。
select *
from emp
where sal < any (
select sal from emp where deptno = 30
)
相当于
select *
from emp
where sal < (
select MAX(sal) from emp where deptno = 30
)
1. 查询工资比30号部门任意一个员工高的员工信息。
select *
from emp
where sal > any (
select sal from emp where deptno = 30
)
相当于
select *
from emp
where sal > (
select MIN(sal) from emp where deptno = 30
)
zei一讲 ..惊艳我了
有些地方转不过弯来呀,看了给位的理解分享,这弯也是转过 来了,给大家点个赞呀,老师讲的不错哦666
select c.ci_id,wm_concat(s.stu_name) from pm_ci c,pm_stu s where instr(c.stu_ids,s.stu_id) >0 group by c.ci_id
没人觉得案例一有问题么?不是说runum只取默认排序么?那对emp的排序不是不应该影rownum么?e1表的rownum字段还是默认值吧?,如果不是的话不就跟前面讲课冲突了吗?排序的rownum应该写到对e1的查询的吧?
在oracle中rownum永远是从1开始的,所以where条件不能 使用>、>=(比如:盖8层楼,1234层都没有盖,怎么能盖5678呢?大概就是这个意思。说的不对,赶紧提出来哦
使用instr()时给a和b两边加逗号来确保准确
wm_concat()在最新版oracle中已被禁用,使用listagg()代替。
SQL> select ci_id, listagg(stu_name, ',') within group (order by stu_id) stu_names from (select c.ci_id, s.stu_id, s.stu_name from pn_ci c, pn_stu s where instr((','||stu_ids||','),(','||(to_char(s.stu_id))||','))>0) group by ci_id;
示例2可以把min函数放在主查询啊,
没有top的语法了,只有rownum的语法。
结合pl/sql就最好了,现在几乎不用命令窗口了。
讲的课很好,很容易听懂!
老师,能不能把ppt放到平台,让同学们下载。

最赞回答 / 勇敢的小点点
我是这样理解的:group by deptno 会把所有数据按部门分成三组,max(avg(sal)) 是把每一组的avg(sal)拿来相比较,得出一个最大值。所以,同时查询deptno和max(avg(sal))时,经过分组,前者返回的是三个值,后者返回一个值。这两个字段无法在同一行显示出来,所以报错。报错所指的不是单组分组函数就是在说deptno字段不是单组数据,要分三组显示。你可以试试改成 select max(deptno),... 应该就不会报错了。个人理解,仅供参考。
这位老师的声音听着让人有点蒙
课程须知
小伙伴们,学习本课程前需要掌握Oracle的语法基础,并且对Oracle的函数有所了解。如不了解这两部分内容,请移步《Oracle数据库开发必备利器之SQL基础》和《Oracle数据库开发利器之函数》两门教程。
老师告诉你能学到什么?
1、掌握分组查询 2、掌握多表查询 3、掌握子查询

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消