使用 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 查询获取在多个部门工作的员工数量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Core Data 中多个实体的属性获取属性值?

SQL Server的四个查询语句,题目在内容里

查询同部门某个员工信息SQL语句

SQL:至少有 10 名员工的部门名称

怎样用SQL语句查询xx部门的人员信息?

SQL - 试图让员工的平均工资高于平均部门工资