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

SQL查询:如何将单日最高6小时总工时平均分摊到员工当日多条销售数据行

工时计算需求实现方案

核心逻辑

先按「日期+员工」维度统计每个员工单日的销售记录行数,再用固定单日总工时6小时除以对应行数,即可得到单条记录分摊的工时。

代码实现

窗口函数实现(推荐,兼容主流SQL引擎:MySQL8.0+、PostgreSQL、Hive、Spark SQL等)

SELECT 
    date,
    employee,
    products,
    sales,
    6 / COUNT(*) OVER (PARTITION BY date, employee) AS hours
FROM 你的业务表名;

逻辑说明:

  • COUNT(*) OVER (PARTITION BY date, employee) 是窗口统计函数,不会改变原表的行数,会为每一行计算对应「相同日期+相同员工」分组下的总记录条数
  • 直接用固定总工时6除以该分组条数,即可得到每行分摊的工时值,完全匹配需求规则

子查询关联实现(兼容低版本不支持窗口函数的SQL引擎)

SELECT 
    t1.date,
    t1.employee,
    t1.products,
    t1.sales,
    6 / t2.daily_record_cnt AS hours
FROM 你的业务表名 t1
LEFT JOIN (
    -- 先统计每个员工每日的销售记录条数
    SELECT 
        date,
        employee,
        COUNT(*) AS daily_record_cnt
    FROM 你的业务表名
    GROUP BY date, employee
) t2 
ON t1.date = t2.date AND t1.employee = t2.employee;

结果验证

用你提供的测试数据执行上述代码,得到的结果和你给出的预期输出完全一致:

dateemployeeproductssaleshours
20210101ben5laptop3
20210101ben10monitor3
20210201tim15laptop6
20210301tim10monitor6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:54:04