You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用子查询关联两张表:获取Tech1部门工单量最多的员工

解决Tech1部门工单量最多员工的查询问题

我看了你的SQL语句,问题主要出在这几个地方:

  • 子查询里写错了表名,你写的tbl_ambilmk应该是performance吧?
  • 部门过滤的条件放错位置了,departement应该属于员工表employee的字段(通常部门信息会存在员工表中),你放到绩效表的子查询里,根本没过滤出Tech1部门的员工
  • 原查询用了LEFT JOIN,会带出没有绩效记录的员工(Ticket为NULL),这不符合你要找有工单量员工的需求

下面给你两种可行的解决方案:

方案一:先获取Tech1部门的最大工单量,再匹配员工

这种写法逻辑直观,先算出Tech1部门所有员工的最大工单数,再找出对应员工:

SELECT e.Emp_name, p.Ticket
FROM employee e
JOIN performance p ON e.id = p.id
WHERE e.departement = 'Tech1' -- 先过滤Tech1部门的员工
AND p.Ticket = (
    SELECT MAX(p2.Ticket)
    FROM employee e2
    JOIN performance p2 ON e2.id = p2.id
    WHERE e2.departement = 'Tech1' -- 子查询里也限定Tech1部门
);

方案二:用窗口函数处理并列最大值的情况

如果存在多个员工工单量相同且都是最大值的情况,这个方法能一次性把所有符合条件的员工都查出来,比方案一更灵活:

SELECT Emp_name, Ticket
FROM (
    SELECT 
        e.Emp_name, 
        p.Ticket,
        RANK() OVER (PARTITION BY e.departement ORDER BY p.Ticket DESC) AS rank_num
    FROM employee e
    JOIN performance p ON e.id = p.id
    WHERE e.departement = 'Tech1'
) AS ranked_employees
WHERE rank_num = 1;

补充说明

  • 我把LEFT JOIN改成了JOIN,因为你要找有工单量的员工,LEFT JOIN会包含没有绩效记录的员工,这不是你需要的结果
  • 如果你的部门字段确实在绩效表performance里,那把上面语句里的e.departement改成p.departement即可

内容的提问来源于stack exchange,提问作者Betran Gustama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 22:22:39