sql-server - 每个部门出勤率最低的前 5 名员工
问题描述
如何找到每个部门出勤率最低的前 5 名员工?
---员工表
--- 部门表
--- 考勤表
我尝试以这种方式找到每个部门的前 5 名薪水,但是如何在此特别适用于员工和部门表的考勤表如何找到出勤率最低的前 5 名员工,请在这方面帮助我 cte。
谢谢
With ctetemp As
(
Select E.EmpId, E.Ename, E.Salary,D.Dname,
DENSE_RANK() OVER(PARTITION BY D.DeptId ORDER BY Salary desc) as rnw
from EmployeeTbl AS E JOIN Departmet AS D
ON D.DeptId = e.Dept_Id_Emp
)
Select * from ctetemp
where rnw IN (5)
解决方案
您需要参考考勤表。
我假设“a”在这种情况下意味着“缺席”。
SELECT
AbsenceSummary.DeptID
,AbsenceSummary.EmpId
,AbsenceSummary.AbsentDays
,AbsenceSummary.AbsentRank
FROM
(
SELECT
dept.DeptId
,att.EmpId
,COUNT(*) AS AbsentDays
,DENSE_RANK() OVER (PARTITION BY dept.DeptId ORDER BY COUNT(*) DESC) AS AbsentRank
FROM
attendance att
INNER JOIN
employee emp
ON emp.EmpID = att.EmpId
INNER JOIN
department dept
ON dpt.DeptId = emp.DeptId
WHERE
dept.DeptId IN (<the departments you care about>)
AND att.atdate >= <your minimum date>
AND att.atdate <= <your maximum date>
AND att.attendance = 'a' --absent
GROUP BY
dept.DeptId
,att.EmpId
) AbsenceSummary
WHERE
AbsenceSummary.AbsentRank <= 5
郑重声明,这种情况下的AtId
专栏是无用的,可能会适得其反。关键是(EmpId,atDate)
。
推荐阅读
- python-3.x - 如何添加 2 个或多个 opencv imshow 窗口以显示在大单窗口中?
- javascript - 具有本地存储的 Alpine JS - x-data 在页面刷新后显示旧/错误值
- php - 使用包含两个元素的关联数组在多维数组中搜索唯一行
- android - A/libc:致命信号 11 (SIGSEGV)
- python - 根据列表中列表的大小返回两个列表
- java - 用于排列数字数组的代码片段中的逻辑错误
- pandas - 如何修复 pandas datafrom 中的此错误 - KeyError: 'Zone% (pfx)'
- python-3.x - 我想为我在 discord.py 中的所有命令添加一个检查。有没有捷径可以做到这一点?
- linear-programming - 解决线性问题(最大化/最小化)时选择哪种方法(Simplex/Big M/Dual simplex Method)
- android - 我可以从 ubuntu 访问 /data/user/0/ 文件夹吗?