【发布时间】:2013-08-01 10:43:09
【问题描述】:
我想创建一个执行以下操作的 PostgreSQL 函数:
CREATE FUNCTION avg_purchases( IN last_names text[] DEFAULT '{}' )
RETURNS TABLE(last_name text[], avg_purchase_size double precision)
AS
$BODY$
DECLARE
qry text;
BEGIN
qry := 'SELECT last_name, AVG(purchase_size)
FROM purchases
WHERE last_name = ANY($1)
GROUP BY last_name'
RETURN QUERY EXECUTE qry USING last_names;
END;
$BODY$
但我在这里看到两个问题:
- 我不清楚数组类型是最有用的输入类型。
-
当我这样做时,当前返回零行:
SELECT avg_purchases($${'Brown','Smith','Jones'}$$);
我错过了什么?
【问题讨论】:
-
在返回类型中使用 text[] 是一个错字。我把它留在这里是因为接受的答案提到了这个错误。
-
原来另一个大错误是调用语法(根据@Erwin的帖子纠正问题后)需要
SELECT avg_purchases($${Brown,Smith,Jones}$$)或SELECT avg_purchases('{Brown,Smith,Jones}')
标签: arrays postgresql aggregate-functions plpgsql postgresql-9.2