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

MySQL中cast/convert转换avg结果为int报错但round、floor可正常运行的原因

问题原因分析
  • MySQL的CAST()和CONVERT()函数对整数类型的转换目标有特殊语法要求,在业内广泛使用的MySQL 5.x版本中,不支持直接写int作为转换目标类型,需要替换为SIGNED(对应有符号整数)或者UNSIGNED(对应无符号整数)。
  • 你本地单独执行cast(25.5 as int)可以成功,是因为本地使用的是MySQL 8.0及以上的高版本,高版本做了语法兼容,支持直接写int;但HackerRank平台使用的是低版本MySQL环境,所以会抛出1064语法错误。
正确实现写法

你可以替换转换目标类型解决报错,示例如下:

SELECT CAST(AVG(population) AS SIGNED)
FROM city;

如果使用CONVERT函数,对应写法为:

SELECT CONVERT(AVG(population), SIGNED)
FROM city;

如果需求是四舍五入取整,也可以直接用你提到的可正常运行的ROUND()函数实现,逻辑更直观:

SELECT ROUND(AVG(population))
FROM city;
补充说明

有C/C++开发背景很容易默认强转使用int关键字,但SQL属于领域特定语言,不同数据库的方言语法和通用编程语言的语法有差异,使用时需要匹配对应数据库的语法规范。

内容的提问来源于stack exchange,提问作者Vinay Chimmili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:08