SQL计算加权平均值时报1064语法错误,如何排查代码问题
语法错误排查及修复方案
存在的语法错误
- 括号匹配异常:第二个IF判断的BETWEEN子句中,
NOW() - INTERVAL 12 MONTH尾部多了多余的左括号,导致IF参数传递和语法结构混乱 - 函数结构不完整:ROUND、AVG、内层IF的左括号均没有对应的右括号闭合,且ROUND函数要求的「保留小数位数」参数放错了位置
- 冗余符号:字段定义末尾多了不必要的逗号,不符合SELECT字段列表的语法规则
修正后可运行代码
ROUND( AVG( `inventory`.`appraisedprice` * IF( v_winning_clerks.dateentered >= NOW() - INTERVAL 12 MONTH, 3, IF( v_winning_clerks.dateentered BETWEEN NOW() - INTERVAL 24 MONTH AND NOW() - INTERVAL 12 MONTH, 2, 1 ) ) ), 2 ) AS "average appraised price"
修正后的代码完全保留了你原本的加权规则:近12个月数据权重为3、12-24个月权重为2、24个月以上权重为1,加权后求平均值并保留2位小数。
内容的提问来源于stack exchange,提问作者Gerreth Schliep
相关产品推荐
相关产品推荐

