数据库查询问题:列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序


1、先创建要用到的例子表,并在表里面插入记录,在sqlserver中做测试 
Sql代码   收藏代码
  1. create table employee(  
  2. id int  identity(1,1) primary key ,  
  3. name varchar(50),  
  4. salary bigint,  
  5. deptid int);  
  6.   
  7. insert into employee values('zs',1000,1),  
  8. insert into employee values('ls',1100,1)  
  9. insert into employee values('ww',1100,1)  
  10. insert into employee values('zl',900,1)   
  11. insert into employee values('zl',1000,2)  
  12. insert into employee values('zl',900,2)   
  13. insert into employee values('zl',1000,2)   
  14. insert into employee values('zl',1100,2)  
  15.   
  16. select * from employee  


2、插入记录后的表结构如下: 
 

3、解这题的思路 

  (1) 首先要求出各个部门的平均工资。 
   
Sql代码   收藏代码
  1. select deptid,avg(salary) avgsal from employee group by deptid  

    结果如下图 
        
   (2)这时我们就要用连合查询,即:select * from ta,tb where ta.name=tb.name,这种形式进行查询,我们把employee表与上面(1)查询出来的结果进行连合查询,找出工资大于平均工资的记录。 
   
Sql代码   收藏代码
  1. select ta.* from employee ta,  
  2. (select deptid,avg(salary) avgsal from employee group by deptid)tb   
  3. where ta.deptid=tb.deptid and ta.salary>tb.avgsal  


     结果如下图: 
       

   (3)列出工资大于平均工资的员工与部门号。并按部门排序,把上面的(2)代码改成 
   
Sql代码   收藏代码
  1. select ta.deptid,count(*) from employee ta,  
  2. (select deptid,avg(salary) avgsal from employee group by deptid)tb   
  3. where ta.deptid=tb.deptid and ta.salary>tb.avgsal group by ta.deptid order by ta.deptid  

    结果如下图: 
      
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值