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

创建计算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 ;

修正说明

  1. 删除冗余的Score INT参数,函数无需外部输入即可计算三张表的平均分。
  2. 将返回类型改为DECIMAL(4,2),支持00.00到99.99的数值范围,完全覆盖IMDb 1-10的分数区间。
  3. 统一变量名,返回时使用正确的average_score。
  4. 使用ROUND(AVG(SCORE), 2)将平均值四舍五入到两位小数,直接得到预期的格式(如7.9)。
  5. 添加DELIMITER //和DELIMITER ;,避免默认分号打断函数定义流程。

内容的提问来源于stack exchange,提问作者Natalie McGreevy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:22:11