读书人

求sql语句。解决方法

发布时间: 2014-01-05 18:22:56 作者: rapoo

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

读书人网 >SQL Server

热点推荐