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

Oracle如何从子查询结果中选取列值最大的行,处理多主体同最大值场景

解决方案

你可以通过三层嵌套子查询实现需求,逻辑简单好理解,完全符合你仅用子查询、不改表结构的要求,同时支持多个员工并列最高工作量的场景:

SELECT 
    E.employee_name,
    t.job_done
FROM
    Employees E,
    -- 子查询1:统计每个员工的总完成工作量
    (SELECT 
         Id, 
         COUNT(*) job_done
     FROM Jobs
     GROUP BY Id) t,
    -- 子查询2:计算所有员工里的最高工作量数值
    (SELECT 
         MAX(job_count) max_job
     FROM 
         (SELECT COUNT(*) job_count FROM Jobs GROUP BY Id)) max_t
WHERE 
    E.Id = t.Id -- 关联员工表和工作量统计结果
    AND t.job_done = max_t.max_job; -- 过滤出工作量等于最高值的所有员工

逻辑说明

  1. 最内层的子查询先按员工Id分组统计所有员工的个人工作量
  2. 第二层子查询取所有员工工作量的最大值,作为匹配阈值
  3. 最外层关联员工表和工作量统计结果,只要工作量等于最大值的记录都会被返回,不管有多少个并列第一都不会遗漏

之前查询的问题说明

  • 查询1的外层多余做了按员工姓名分组的操作,相当于重复输出了子查询已经算好的每个员工的工作量,自然得不到全局最高的结果
  • 查询2用fetch first row only仅能返回排序后的第一条记录,如果有多个员工工作量同为最高,只会返回第一个匹配到的员工,会遗漏数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:02