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

SQL语法错误求助:基于双条件对同类值求和计算出勤积分

解决SQL语法错误并实现需求

错误原因分析

你遇到的ODBC::Error: 37000 (1003) SQL compilation error: syntax error line 8 at position 8 unexpected 'GROUP'错误,核心原因是WHERE子句末尾多了一个分号。这个多余的分号会让数据库误以为前面的SELECT语句已经结束,后面的GROUP BY被当成了一条独立的不完整语句,直接触发语法报错。

除此之外,原SQL的逻辑也需要调整:你需要先过滤出forgiven=0且日期在近90天内的记录,再按driver_id分组计算积分总和,最后用6减去这个总和得到目标值,原SQL的CASE WHEN用法不符合这个逻辑顺序。

修正后的SQL语句

SELECT 
    driver_id,
    6 - SUM(attendance_points) AS total_attendance_points
FROM attendance_events
WHERE 
    forgiven = 0
    AND date >= DATEADD('day', -90, CURRENT_DATE())  -- 确保包含当前日期往前90天内的所有记录
GROUP BY driver_id;

关键调整说明

  • 移除了WHERE子句末尾的多余分号,让GROUP BY与前面的SELECT成为同一条完整语句
  • 在WHERE中新增forgiven=0的过滤条件,提前排除不需要参与计算的记录
  • 调整日期条件为date >= DATEADD('day', -90, CURRENT_DATE())(原SQL用<会漏掉90天当天的记录,更符合“往前90天内”的需求)
  • 简化计算逻辑:因为已经提前过滤了forgiven=0的记录,不需要再用CASE WHEN判断,直接分组求和后用6相减即可

示例数据验证

用你提供的示例数据执行修正后的SQL,会得到以下结果:

driver_idtotal_attendance_points
8087956-1
1160725-2

7922706因为forgiven=1被过滤,不会出现在结果集中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:57:51