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

如何在MySQL中计算每位员工的set_num日均平均值

计算员工日均set_num计数的平均值

要得到每位员工每日set_num计数的平均值,需要先统计每个员工每天的set_num数量,再对这些每日数值求平均,同时关联员工的主管信息。以下是修正后的SQL语句:

方法一:使用CTE分步计算

WITH daily_set_counts AS (
    -- 第一步:统计每个员工每天的set_num数量
    SELECT 
        login,
        date_set,
        COUNT(set_num) AS daily_count
    FROM sarav.set_count
    GROUP BY login, date_set
)
-- 第二步:对每个员工的每日计数求平均,关联员工表获取主管信息
SELECT 
    e.employee,
    e.supervisor,
    e.lis_login AS login,
    ROUND(AVG(dsc.daily_count), 1) AS Avg_Set_Num_Day
FROM sarav.employees e
JOIN daily_set_counts dsc ON e.lis_login = dsc.login
GROUP BY e.employee, e.supervisor, e.lis_login
ORDER BY e.supervisor;

方法二:单步计算(总计数除以天数)

如果不需要单独查看每日数据,也可以直接用总set_num计数除以员工的工作天数(去重后的日期数):

SELECT 
    e.employee,
    e.supervisor,
    e.lis_login AS login,
    ROUND(COUNT(s.set_num) / COUNT(DISTINCT s.date_set), 1) AS Avg_Set_Num_Day
FROM sarav.employees e
JOIN sarav.set_count s ON e.lis_login = s.login
GROUP BY e.employee, e.supervisor, e.lis_login
ORDER BY e.supervisor;

说明

  • 两种方法都会得到相同结果:统计每个员工每天的set_num数量,再计算这些数值的平均值。
  • 使用ROUND(..., 1)是为了匹配你期望的结果格式,保留一位小数。
  • 分组时必须包含employee、supervisor、login三个字段,确保分组逻辑正确,避免聚合错误。

如果你的需求是每日set_num的最大值的平均值(而非计数的平均值),可以修改为以下SQL:

WITH daily_set_max AS (
    SELECT 
        login,
        date_set,
        MAX(set_num) AS daily_max
    FROM sarav.set_count
    GROUP BY login, date_set
)
SELECT 
    e.employee,
    e.supervisor,
    e.lis_login AS login,
    ROUND(AVG(dsm.daily_max), 1) AS Avg_Set_Num_Day
FROM sarav.employees e
JOIN daily_set_max dsm ON e.lis_login = dsm.login
GROUP BY e.employee, e.supervisor, e.lis_login
ORDER BY e.supervisor;

内容的提问来源于stack exchange,提问作者s.pur.theov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:45:37