MySQL带条件SUM聚合查询语法报错的排查与修复
错误原因与修复方案
核心语法错误(触发报错的直接原因)
- 复制SQL时带了网页端的HTML转义符
>,需要替换为原生大于号>,非法字符会导致MySQL解析器混乱,误将报错位置指向开头的select关键字。 CASE分支语法写错:MySQL搜索型条件CASE的正确格式为CASE WHEN 条件 THEN 返回值 ...,你多写了多余的where,缺少必要的WHEN关键字,这是触发语法报错的核心问题。- 若使用MySQL 5.7及以上版本,默认开启
only_full_group_by校验,SELECT列表中所有非聚合字段(staffname、staffsymbol)必须加入GROUP BY子句,否则会触发兼容报错。
修复后可直接运行的SQL
SELECT b.assignedstfid, s.staffname, s.staffsymbol, SUM( CASE WHEN b.bookingstarttime > '2021-03-31' THEN TIMESTAMPDIFF(minute, b.bookingstarttime, b.bookingendtime) ELSE 0 END ) AS lengthofworking FROM crm.bookingtable b INNER JOIN crm.staffinfo s ON s.staffid = b.assignedstfid GROUP BY b.assignedstfid, s.staffname, s.staffsymbol;
异常排查补充
- 如果仍提示
select位置需要左括号,先执行;清空MySQL客户端中未闭合的前置语句(比如之前未写完的嵌套查询、未关闭的括号),再重新执行即可。 - 若
bookingstarttime为datetime类型,建议将过滤条件调整为b.bookingstarttime >= '2021-03-31 00:00:00',时间匹配精度更高。
内容的提问来源于stack exchange,提问作者tanglai
相关产品推荐
相关产品推荐

