创建计算Netflix平均IMDb分数存储函数遇1067语法错误及精度优化
问题分析与修正方案
你的存储函数出现1067语法错误,同时无法满足保留两位小数的需求,主要有以下几个问题:
错误点梳理
- 多余参数:函数不需要输入参数,
Score INT属于冗余定义,会导致语法冲突。 - 返回类型不合法:
DECIMAL(2,2)总精度为2、小数位为2,意味着整数部分只能为0,无法存储7.9这类包含整数位的数值。 - 变量名拼写错误:声明的变量是
average_score,但返回时写的是avg_score,变量名不匹配。 - 未处理小数保留:原代码没有对平均值做四舍五入处理,无法得到两位小数的结果。
- 分隔符问题:MySQL中默认的
;会提前终止函数定义,需要临时修改分隔符。
修正后的存储函数代码
DELIMITER // CREATE FUNCTION Average_Netflix_Score() RETURNS DECIMAL(4,2) DETERMINISTIC BEGIN DECLARE average_score DECIMAL(4,2); SELECT ROUND(AVG(SCORE), 2) INTO average_score FROM ( SELECT SCORE FROM NETFLIX_19 UNION ALL SELECT SCORE FROM NETFLIX_20 UNION ALL SELECT SCORE FROM NETFLIX_21 ) AS CombinedScores; RETURN average_score; END // DELIMITER ;
修正说明
- 删除冗余的
Score INT参数,函数无需外部输入即可计算三张表的平均分。 - 将返回类型改为
DECIMAL(4,2),支持00.00到99.99的数值范围,完全覆盖IMDb 1-10的分数区间。 - 统一变量名,返回时使用正确的
average_score。 - 使用
ROUND(AVG(SCORE), 2)将平均值四舍五入到两位小数,直接得到预期的格式(如7.9)。 - 添加
DELIMITER //和DELIMITER ;,避免默认分号打断函数定义流程。
内容的提问来源于stack exchange,提问作者Natalie McGreevy
相关产品推荐
相关产品推荐

