如何调整现有SQL查询新增司机未准假缺勤次数统计列
修改方案
你可以通过条件聚合实现新增未准假缺勤统计的需求,修改后的查询语句如下:
SELECT driver, callouts.id, max(date) AS latest_absence_date, count(*) AS total_absence_count, SUM(CASE WHEN callouts.EXCUSED = 1 THEN 1 ELSE 0 END) AS unexcused_absence_count FROM employees INNER JOIN callouts ON employees.id = callouts.id WHERE employees.status = 0 GROUP BY driver, callouts.id ORDER BY driver
说明
- 新增的
SUM(CASE WHEN callouts.EXCUSED = 1 THEN 1 ELSE 0 END) AS unexcused_absence_count即为未准假缺勤次数字段:逐行判断当前缺勤记录的EXCUSED值,为1(未准假)就计入统计,最终求和得到对应司机的未准假缺勤总数。如果你使用的是MySQL等支持布尔表达式直接返回数值的数据库,还可以简化为SUM(callouts.EXCUSED = 1) AS unexcused_absence_count,效果完全一致。 - 调整了原始语句的隐式逗号连接为显式
INNER JOIN写法,关联逻辑更清晰,也更容易避免后续维护时出现关联条件遗漏的问题。 - 补充了
GROUP BY中的callouts.id字段,符合SQL严格模式下“SELECT的非聚合字段必须全部出现在GROUP BY中”的语法要求,避免数据库开启严格校验时出现语句报错。
内容的提问来源于stack exchange,提问作者drodsher
相关产品推荐
相关产品推荐

