34,594
社区成员
发帖
与我相关
我的任务
分享
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
*/
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]
哦 那计算的时候,是总分 / 人次 ,还是 / 人数 呢,前者不去重,后者去重?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]
考虑过一个员工多条得分记录了吗?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
*/
select c.序号,c.员工id,b.姓名,b.部门 as 部门序号,a.部门名称,sum(c.得分)/COUNT(*) as 平均得分
from 表C c
left join 表B b on c.员工id = b.id
left join 表A a on b.部门 = a.部门序号
where c.员工id = 1
[/quote]
对不起,我条件没给全,我试了一下不对。
这是因为得分记录中,同一个员工,他不是只有一条记录,因此count(*)不对,
就是说所有的得分再除员工的个数,一旦同一个员工得分记录超过2条就不对了。
select c.序号,c.员工id,b.姓名,b.部门 as 部门序号,a.部门名称,sum(c.得分)/COUNT(*) as 平均得分
from 表C c
left join 表B b on c.员工id = b.id
left join 表A a on b.部门 = a.部门序号
where c.员工id = 1
select c.序号,c.员工id,b.姓名,b.部门 as 部门序号,a.部门名称,sum(c.得分)/COUNT(*) as 平均得分
from 表C c
left join 表B b on c.员工id = b.id
left join 表A a on b.部门 = a.部门序号
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 sum(c.得分)*1.0 / COUNT(*) as 平均得分
from 表a a
left join 表b b
on a.部门序号 = b.部门
left join 表c c
on c.员工id = b.id
where a.部门名称 = '办公室'
/*
2.500000000000
*/