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

MySQL查询问题:如何统计员工状态为ended的预约总时长?

解决方案

你只需要对时长求和部分增加状态过滤条件即可,修改后的查询语句如下:

$status = "cancelled";
// 注意:如果booking表中关联员工的字段实际为你代码里写的convenerID就保留,否则替换为你表结构里的StaffID
$query1 = "SELECT 
    staff.StaffID, 
    CONCAT(staff.First_name, ' ', staff.Last_name) AS StaffName,
    COALESCE(SUM(IF(booking.Status = 'ended', booking.duration, 0)), 0) AS `MeetingHours(min)`,
    COALESCE(SUM(booking.Status = '$status'), 0) AS `No. of cancelled meeting`
FROM staff 
LEFT JOIN booking ON staff.StaffID = booking.StaffID 
GROUP BY staff.StaffID";

修改说明

  • 核心调整是将原来直接求和所有时长的sum(booking.duration)替换为带条件判断的求和逻辑:SUM(IF(booking.Status = 'ended', booking.duration, 0)),只有状态为ended的预约才会累加时长,其余状态的预约时长记为0,满足你只统计已结束预约总时长的需求,外层加COALESCE是为了处理员工没有任何预约的情况,返回0而非NULL。
  • 新增CONCAT(staff.First_name, ' ', staff.Last_name) AS StaffName直接拼接得到员工完整姓名,符合你返回结果的字段要求。
  • 请注意关联条件的字段一致性:你提供的booking表结构中关联员工的字段为StaffID,如果原代码中的convenerID是笔误,请替换为StaffID。

按照你提供的样例数据,修改后返回结果如下:

StaffIDStaffNameMeetingHours(min)No. of cancelled meeting
1John Doe301
2Mary Doe01

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:57:01