首页 > 解决方案 > 将我的计算转换为用户定义的函数

问题描述

我正在尝试将我的计算转换为 UDF,但我不断收到错误,不知道如何更正它。

这是代码:

CREATE FUNCTION f_q1 (integer) RETURNS integer stable as $$
SELECT COUNT(DISTINCT(CASE WHEN q_1 IN ('8', '9', '10') THEN RESPONSE_ID END))*1.0 / COUNT(DISTINCT(CASE WHEN q_1 IS NOT NULL THEN RESPONSE_ID END))*1.0
$$ language sql;

我实际上是在尝试使用以下代码:

SELECT
COUNT(DISTINCT(CASE WHEN f.q_1 IN ('8', '9', '10') THEN f.RESPONSE_ID END))*1.0 / COUNT(DISTINCT(CASE WHEN f.q_1 IS NOT NULL THEN f.RESPONSE_ID END))*1.0 AS q_1
FROM FACT f

并将其创建为我可以在整个查询过程中调用的 UDF。

这是我第一次做 UDF - 有人可以帮我纠正这个问题吗?

标签: sqlamazon-redshift

解决方案


CREATE FUNCTION f_q1 (integer)表示您正在传递一个整数。因此,您的 UDF 只能使用该整数来确定其输出。

函数中没有调用任何内容q_1,也没有多行输入。它是一个标量 UDF,这意味着它接受一定数量的输入值并返回单个输出值。

您可能会考虑使用存储过程而不是标量 UDF。

但是,坦率地说,如果您的上述查询有效,请继续使用它。把它放在一个函数中并没有什么特别的好处。


推荐阅读