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


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、插入记录后的表结构如下: 
数据库查询问题:列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序_第1张图片  

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  

    结果如下图: 
      

你可能感兴趣的:(sql)