使用 SQL 查询获取在多个部门工作的员工数量
Posted
技术标签:
【中文标题】使用 SQL 查询获取在多个部门工作的员工数量【英文标题】:Get number of employees who worked in more than one department with SQL query 【发布时间】:2013-10-26 15:16:59 【问题描述】:我正在尝试找出一个查询,该查询显示在多个部门工作的员工的数量(数量)。这里是表名和字段:
Employee
(id_employee,employee_name,salary)
Department
(id_dept, 部门名称, 预算)
Department_Employee
(id_employee, id_dept, workhours_percentage)
假设Department_Employee表的内容是
id_employee id_dept workhours_percentage
----------- ------- --------------------
0001 03 100
0001 04 50
0001 05 60
0002 05 60
0002 09 90
0003 08 80
0004 07 80
0005 06 60
0006 05 70
0007 04 75
0008 10 95
0009 02 25
0010 01 40
使用正确的查询,结果应该是 2(员工),因为有 2 名员工在多个部门工作
员工0001在3个部门工作 员工 0002 在 2 个部门工作我尝试了以下查询
SELECT COUNT(DISTINCT id_employee)
FROM Department_Employee
GROUP BY id_employee
HAVING COUNT(id_employee)>1
但结果不对。
请帮帮我。
谢谢。
【问题讨论】:
当您按id_imployee
分组时,您认为COUNT(DISTINCT id_employee)
可能是什么?
【参考方案1】:
SELECT COUNT(*)
FROM
(
SELECT id_employee, COUNT(*) AS CNT
FROM Department_Employee
GROUP BY id_employee
) AS T
WHERE CNT > 1
【讨论】:
谢谢,它有效!但是,如果我要求一些解释,你介意吗? :D Department_Employee 链接员工与部门的关系。 "Count(*)" 将按employee_id 统计行数。 “CNT”将在子查询中具体化,并且可以在外部查询的“where”子句中用作过滤器。【参考方案2】:让所有在多个部门工作的员工:
SELECT id_employee, COUNT(*)
FROM Department_Employee
GROUP BY id_employee
HAVING COUNT(*)>1
计算它们:
;
WITH cte As
(
SELECT id_employee
FROM Department_Employee
GROUP BY id_employee
HAVING COUNT(*)>1
)
SELECT COUNT(*) FROM cte
【讨论】:
我收到类似这样的错误“没有为 'cte' 的第 2 列指定列名。” @KleinrockHyper 抱歉,现已修复。 谢谢,现在可以了。我还有一个问题,如何将该代码放入函数中? @KleinrockHyper 什么样的功能?您将如何使用它? 统计1个以上部门员工人数的功能。我尝试像以下代码一样进行查询:( CREATE FUNCTION Func_EmployeesNumbers RETURNS NUMERIC AS BEGIN DECLARE empnumb NUMERIC SELECT empnumb = ..RETURN empnumb END )[empnumb is the parameter/return value] 如何将您的代码放入选择部分?【参考方案3】:select e.id_employee, count(e.id_dep) from Department_Employee e group by e.id_employee having count(e.id_dep)>1 ;
在此我尝试首先尝试通过 id_employee 获取部门 ID 组的计数 并且我们的要求是找到属于多个部门的员工,使用 count(e.id_dep)>1 来检索相同的内容。
【讨论】:
单行解决方案应该在注释中。 感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。【参考方案4】:SELECT COUNT(*)
FROM (
SELECT id_employee, COUNT(*) AS CNT
FROM Department_Employee
GROUP BY id_employee
) AS T
WHERE CNT > 1
【讨论】:
口头解释通常很有帮助以上是关于使用 SQL 查询获取在多个部门工作的员工数量的主要内容,如果未能解决你的问题,请参考以下文章