Redshift:不能在 UDF 中使用聚合函数?

Posted

技术标签:

【中文标题】Redshift:不能在 UDF 中使用聚合函数?【英文标题】:Redshift: Cannot use aggregate function inside UDF's? 【发布时间】:2020-05-11 18:24:22 【问题描述】:

我写了以下代码:

create or replace function max_price() 
    returns real 
    volatile
as 
$$
    select 
        max(main_amount)
    from
        table
$$ 
language sql;

我收到此错误消息: 错误:选择表达式不能有聚合或窗口函数。 上下文:创建 SQL 函数“max_price”主体

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

不,Redshift UDF 是标量 - 输入值的每一“行”返回一个输出。

https://docs.aws.amazon.com/redshift/latest/dg/udf-creating-a-scalar-sql-udf.html

您可以使用存储过程来获得您正在寻找的结果。

https://docs.aws.amazon.com/redshift/latest/dg/stored-procedure-create.html

【讨论】:

【参考方案2】:

Amazon Redshift 中的标量用户定义函数无法发出从表中检索数据的SELECT 命令。它旨在作为一种计算数字的方法,而不是查询数据库。

来自Creating a scalar SQL UDF - Amazon Redshift:

SELECT 子句不能包含以下任何类型的子句:FROM、INTO、WHERE、GROUP BY、ORDER BY、LIMIT

如果您需要查阅另一个表格作为函数的一部分,请使用Stored procedure。

【讨论】:

以上是关于Redshift:不能在 UDF 中使用聚合函数?的主要内容,如果未能解决你的问题,请参考以下文章

具有动态 SQL 语句的 Redshift UDF 函数

为啥不能在 Redshift 的 CTE 的某些子句中调用不可变的 UDF?

如何在 Redshift(亚马逊)中更新 UDF?

redshift 更改 udf 更改所有者

在 Redshift 中使用 python UDF 中的表

在 Redshift UDF 中求和