2016-12-07 58 views
-1

我有两个表包含员工和部门的信息。这两个看起来如下MySQL的计数值,并获得在一个SQL查询的百分比

Employee表:

ID_emp ID_dep year 
    3000 4   0 
    3001 4   1 
    3002 4   2 
    3003 16  3 
    3004 15  3 

系表:

ID_dep dep_descr 
16  management 
4  accounting 

现在我需要找出被用于超过1年,也是每个部门的员工数量提供每个部门的员工数量相对于整个公司(所有部门)雇佣1年以上的员工总数的百分比。

结果应该是这个样子:

dep_descr number of employees percent of total employees 
management   12       5% 
accounting   4       1.6% 
...    ...      ... 

回答

1

这是怎么回事?

select 
    concat(cast(count(e.id_emp)/(select count(id_emp) from employee) * 100 as decimal(4,2)), '%') employees_in_dept, d.dep_descr 
from employee e 
inner join department d 
on e.id_dep = d.id_dep 
group by d.id_dep 
-1

你尝试过这么远吗?您可能需要在员工总数中使用子查询,并将其用于划分为由部门分组的员工数量。

+0

我已经尝试使用count()和groupby()一起使用。我设法达到了一个表格,该表格显示了每个部门的员工数量,但是包含百分比值的每次尝试都会导致错误:S – AaronDT

0
create temp table emp (id_emp int, id_dep int, nyear int); 
create temp table dep (id_dep int, desc_dep text); 
insert into dep values (16,'management'),(4, 'accounting'); 
insert into emp values (3000,4,0),(3001,4,1),(3002,4,2),(3003,16,3),(3004,16,3); 

with cte (id_dep, desc_dep, num_employees) as 
(
select emp.id_dep, dep.desc_dep, count(*) 
from emp 
    left join dep on emp.id_dep = dep.id_dep 
where emp.nyear > 1 
group by emp.id_dep, dep.desc_dep 
) 
select 
    cte.id_dep, 
    cte.desc_dep, 
    cte.num_employees, 
    cte.num_employees * 100/(select count(*) from emp where emp.nyear > 1)::float as percent_of_total 
from cte;