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

PostgreSQL中两列平均值相除报错,求语法修正方案

问题分析与解决方案

你遇到的错误核心是语法误用:你写的(AVG(CAST("Column1" AS numeric(4,2))),2)这种写法,在PostgreSQL里会被解析成一个包含两个元素的行记录(row value)——第一个元素是Column1的平均值,第二个元素是固定数字2,而不是对平均值进行小数位数保留。当你尝试用两个这样的行做除法时,PostgreSQL无法处理行与行的算术运算,因此抛出了ERROR: row comparison operator must yield type boolean, not type numeric的错误。

正确的写法

如果你想要的是「Column1的平均值 ÷ Column2的平均值」,再保留两位小数作为最终的平均价格,应该用ROUND()函数来包裹整个除法表达式,而不是给平均值加多余的括号和逗号:

SELECT ROUND(
         AVG(CAST("Column1" AS numeric(4,2))) / 
         AVG(CAST("Column2" AS numeric(4,2))),
         2
       ) AS average_price
FROM table1;

额外说明

你之前单独运行的查询SELECT (AVG(CAST("Column1" AS numeric(4,2))),2) FROM table1其实并没有实现「保留两位小数」的效果——它返回的是一个行类型的结果(比如(12.345, 2)),而不是格式化后的数值。如果要单独对某一列的平均值保留两位小数,正确的写法是:

SELECT ROUND(AVG(CAST("Column1" AS numeric(4,2))), 2) FROM table1;

这样就能得到你期望的、保留两位小数的平均值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:16:13