当前位置: 代码迷 >> Sql Server >> 求sql语句。该如何解决
  详细解决方案

求sql语句。该如何解决

热度:71   发布时间:2016-04-24 18:43:33.0
求sql语句。

表a 
部门序号  部门名称
  1        办公室
  2        人事处

表b   
id    姓名  部门
1     王x   1
2     李x   1
3     刘x   2
4     张x   2

表c  
序号  员工id 得分
1      1     2
2      2     3
3      3     5
4      4     2

求'办公室'的人均得分.
      




------解决方案--------------------
引用:
如果已知一条件,就是一个员工的代码,比如id=1,如何查找他的部门平均分呢?


是这样吗:
create table 表a(部门序号 int,  部门名称 varchar(20))

insert into 表a
select   1        ,'办公室' union all
select   2        ,'人事处'

create table 表b(id  int,   姓名 varchar(20), 部门 int)

insert into 表b
select 1     ,'王x',   1 union all
select 2     ,'李x',   1 union all
select 3     ,'刘x',   2 union all
select 4     ,'张x',   2

create table 表c(序号 int,  员工id int, 得分 int)

insert into 表c
select 1      ,1,     2 union all
select 2      ,2,     3 union all
select 3      ,3,     5 union all
select 4      ,4,     2
go


select (select SUM(c.得分) * 1.0 / COUNT(*)
        from 表a a
        inner join 表b bb
                on a.部门序号 = bb.部门
        left join 表c c
               on c.员工id = bb.id         
        where a.部门序号 = b.部门)
from 表b b  
where b.id = 1
/*
2.500000000000
*/

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

如果已知一条件,就是一个员工的代码,比如id=1,如何查找他的部门平均分呢?


是这样吗:
create table 表a(部门序号 int,  部门名称 varchar(20))

insert into 表a
select   1        ,'办公室' union all
select   2        ,'人事处'

create table 表b(id  int,   姓名 varchar(20), 部门 int)

insert into 表b
select 1     ,'王x',   1 union all
select 2     ,'李x',   1 union all
select 3     ,'刘x',   2 union all
select 4     ,'张x',   2

create table 表c(序号 int,  员工id int, 得分 int)

insert into 表c
select 1      ,1,     2 union all
select 2      ,2,     3 union all
select 3      ,3,     5 union all
select 4      ,4,     2
go


select (select SUM(c.得分) * 1.0 / COUNT(*)
        from 表a a
        inner join 表b bb
                on a.部门序号 = bb.部门
        left join 表c c
               on c.员工id = bb.id         
        where a.部门序号 = b.部门)
from 表b b  
where b.id = 1
/*
2.500000000000
*/

考虑过一个员工多条得分记录了吗?


哦 那计算的时候,是总分 / 人次 ,还是 / 人数 呢,前者不去重,后者去重?
  相关解决方案