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

MySQL嵌套CASE配合DAYOFWEEK统计周末订单报语法错误怎么解决

语法错误与逻辑问题说明

  • 核心语法报错原因:COUNT 函数内的嵌套 CASE 语句缺少闭合的 END 关键字,语法结构不完整。
  • 逻辑错误:误用 COUNT 函数,COUNT 会统计所有非NULL值,你原逻辑中写的 ELSE 0 会导致不满足条件的0也被计入统计,最终计数结果不符合预期。
  • 其他可优化点:DAYOFWEEK 函数返回值是数字类型,不需要用字符串引号包裹;STATUS是MySQL保留关键字,作为别名时建议加反引号避免歧义。

修正后的查询语句

SELECT
    staff.StaffID,
    staff.First_name,
    staff.Last_name,
    SUM(
        CASE WHEN booking.Status = 'ended' THEN booking.duration ELSE 0 END
    ) AS duration,
    SUM(
        CASE 
            WHEN booking.Status = 'ended' AND (DAYOFWEEK(booking.Booking_date) = 1 OR DAYOFWEEK(booking.Booking_date) = 7)
            THEN 1 
            ELSE 0 
        END
    ) AS afterhour,
    COALESCE(
        SUM(booking.Status = 'cancelled'),
        0
    ) AS `STATUS`
FROM
    staff
LEFT JOIN booking ON staff.StaffID = booking.convenerID
GROUP BY
    staff.StaffID

调整说明

  • 不需要嵌套两层CASE,直接把两个判断条件合并写在同一个WHEN里即可,逻辑更简洁清晰。
  • 把COUNT替换为SUM,满足条件加1,不满足加0,统计结果完全匹配你的需求。
  • 所有CASE语句都补全了END关键字,彻底解决语法报错问题。

内容的提问来源于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 09:06:00