SQL查询报no viable alternative at input错误 语法排查
错误原因
触发解析报错的直接原因是**IN操作符语法不符合SQL规范**:SQL中IN关键字后必须跟随圆括号包裹的候选值集合,哪怕仅匹配单个值也不能省略括号。原代码中写为fdse.eventaction IN 'zoom image',解析器运行到字符串位置时无法匹配合法语法规则,直接在对应位置抛出解析失败错误。
除了解析错误外,原代码还存在一处逻辑语法问题:聚合函数SUM()嵌套位置错误。原写法将聚合函数放在CASE WHEN的THEN分支内,CASE WHEN本身是逐行执行的判断逻辑,聚合函数写在此处会触发聚合规则校验错误,无法正常执行。
修复方法
- 修正
IN语法:将IN 'zoom image'改为IN ('zoom image'),单值匹配场景下也可以直接替换为= 'zoom image',两种写法均合法。 - 调整聚合与判断的嵌套顺序:将逐行判断的CASE WHEN逻辑放在
SUM()内部,先逐行判断是否符合事件条件,符合则返回对应的事件数,不符合返回0,再通过SUM完成聚合统计。
修复后的可运行代码如下:
%sql SELECT SUM( CASE WHEN fdse.`eventaction` IN ('zoom image') THEN CAST(fdse.`totalevents` AS BIGINT) ELSE 0 END ) AS `zoom` FROM GA_FAVORITES_DIGITAL_STYLIST_EVENTS AS fdse INNER JOIN GA_FAVORITES_SESSIONS AS fs ON fdse.uniquesessionid = fs.uniquesessionid AND fdse.trans_date = fs.trans_date WHERE fs.trans_date >= date_add(current_date,-10) LIMIT 10
如果后续需要统计多个事件的数值,直接在IN的括号内追加逗号分隔的事件名称字符串即可,无需调整其他结构。
内容的提问来源于stack exchange,提问作者Elena Epshtein
相关产品推荐
相关产品推荐

