如何在PostgreSQL聚合函数的值表达式中添加参数?
解决方法
首先明确你的需求应该是要在my_real_column的最大值和位置参数$1之间取更大的那个,或者对每行的my_real_column和$1取最大值后再聚合,两种场景都可以用以下标准SQL实现:
场景1:先取列的最大值,再和参数比较取较大值
SELECT GREATEST(max(my_real_column), $1) FROM my_table;
这里先通过max(my_real_column)计算出整个表中my_real_column的聚合最大值,再用GREATEST()函数比较这个最大值和$1,返回两者中更大的那个。
场景2:每行先和参数取最大值,再聚合所有结果
SELECT max(GREATEST(my_real_column, $1)) FROM my_table;
这个写法会先对表中每一行的my_real_column和$1取最大值,再对所有行的这个结果做聚合取最大,最终效果和场景1完全一致。
你之前的错误原因
- 用
||是字符串拼接运算符,不是数值比较逻辑,而且real类型和参数类型不兼容,必然会触发运算符错误。 max(my_real_column, SELECT $1)语法完全错误,标准SQL的聚合函数max只接受单个表达式,多值之间的最大值比较需要用GREATEST()这个标量函数,再结合聚合逻辑使用。
内容的提问来源于stack exchange,提问作者jkeys
相关产品推荐
相关产品推荐

