分组 连接的查询把我给弄昏了

 几乎要崩溃了,今天做了几道SQL查询题目,要求用连接,分组等形式把它做出来,真把我搞死了,

首先我不太明白,sql查询语句的语法,印象中好像join 后面的on 不能和 where同时存在,做题怎么也做不出来,老师讲了on后面只是连接条件,它可以与where共存的。

还有group by ,我做题目时 总是提示 不是group by语句 ,这SX Oracle 。。最后老师讲了,select 后面的列 只能是group by后面的列 否则会出现错误。

然后,还有我不会分析题目,搞不清楚题目要求和表的关系 就开始下手了,结果根据表之间的逻辑关系,有些东西 通过 选择不同表 就可以查询出来,我非得连接那个表做查询,有些是我考虑的太复杂了,换一个表做分组、查询条件,结果自然就出来了,我非得在一个表上死转转~

 

例如一个题目:  列出在每个部门工作的员工数量、平均工资和平均服务期限

本来没有要求列出部门名称,我想列出部门。写的如下(不管怎么说终于写出来了)

select d.dname,t.ct,t.ags,t.agm from
(select deptno,count(*) ct,avg(sal) ags,avg(months_between(sysdate,hiredate))/12 agm
from emp group by deptno) t right join dept d
on d.DEPTNO=t.deptno;

 

下面是老师的答案:

select dname,count(*),avg(sal),avg(months_between(sysdate,hiredate))/12 from emp join dept on emp.deptno=dept.deptno group by dname

 

两个答案都能写出答案,但符合出题者要求的,我想是老师那个。 因为表dept列出的是所有部门以它的dname为分组条件也是合适的,因为表emp的部门都在它里面。用emp表中部门分类不全,而且不符合出题者的要求的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值