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

如何修改SQL查询以列出任职时长超过平均水平的员工?

解决SQL查询返回空表问题:筛选任职时长超平均水平的员工

原查询返回空表的核心问题是逻辑维度不匹配:你把DATEDIFF(SYSDATE(), hire_date)计算出的任职天数(数值型),和AVG(hire_date)计算出的**雇佣日期平均值(日期/原始日期数值)**直接比较,两者完全不是同一类指标,自然不会有符合条件的结果。

正确的查询写法

方法1:子查询计算平均任职天数

SELECT first_name, last_name 
FROM employees 
WHERE DATEDIFF(SYSDATE(), hire_date) > (
    -- 先计算所有员工的平均任职天数
    SELECT AVG(DATEDIFF(SYSDATE(), hire_date)) 
    FROM employees
)

方法2:窗口函数方式(支持窗口函数的数据库适用,如MySQL 8.0+、PostgreSQL等)

SELECT first_name, last_name
FROM (
    SELECT 
        first_name, 
        last_name,
        -- 计算全局平均任职天数
        AVG(DATEDIFF(SYSDATE(), hire_date)) OVER () AS avg_tenure_days,
        -- 计算当前员工的任职天数
        DATEDIFF(SYSDATE(), hire_date) AS tenure_days
    FROM employees
) AS emp_tenure
WHERE tenure_days > avg_tenure_days

说明

两种写法都是先计算出所有员工的平均任职天数,再将每个员工的实际任职天数与该平均值做比较,从而筛选出任职时长超过平均水平的员工。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:55:35