首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求sql语句。解决方法

2014-01-05 
求sql语句。表a 部门序号部门名称1办公室2人事处表bid姓名部门1王x12李x13刘x24张x2表c序号员工id 得分1122

求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
*/


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


哦 那计算的时候,是总分 / 人次 ,还是 / 人数 呢,前者不去重,后者去重?
[解决办法]
引用:
办公室2个人,结果就是(2+3+2.5+1.3)/2=4.4


是这样吗:
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, 得分 numeric(10,2))

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 union all
select 5      ,1,     2.5 union all
select 6      ,1,     1.3
go


select (select SUM(c.得分) * 1.0 / COUNT(distinct bb.id)
        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
/*
4.400000
*/

热点排行