Sql 将多行(查询结果)传递给函数

Sql 将多行(查询结果)传递给函数,sql,postgresql,postgresql-9.3,Sql,Postgresql,Postgresql 9.3,我有一个从函数中选择的函数(使用普通参数,而不是参数集)。但是,我希望在查询中多次调用该函数(然后聚合结果),并向其提供一个CTE 一些(示例)代码: 这不起作用,我收到以下错误消息: ERROR: more than one row returned by a subquery used as an expression 现在我想知道如何重写查询。我可以在CTE结果上循环,然后每次用一个输入值调用函数,将结果存储在列中,最后找到最小值——这感觉很笨拙,应该会很慢。另一种方法是将我的函数包装

我有一个从函数中选择的函数(使用普通参数,而不是参数集)。但是,我希望在查询中多次调用该函数(然后聚合结果),并向其提供一个CTE

一些(示例)代码:

这不起作用,我收到以下错误消息:

ERROR:  more than one row returned by a subquery used as an expression
现在我想知道如何重写查询。我可以在CTE结果上循环,然后每次用一个输入值调用函数,将结果存储在列中,最后找到最小值——这感觉很笨拙,应该会很慢。另一种方法是将我的函数包装在另一个函数中,使用数组参数设置和返回。但这只是把问题推开了:我不知道如何简单地包装它

将函数重写为表单集似乎很好。不过,这是一种变通方法,学习如何使用查询返回的多行调用普通函数(如果可能的话)会更好。

尝试以下方法:

SELECT min(f.a)
  FROM bar  
  CROSS JOIN foo(bar.a) f
  WHERE bar.b = 1

你的答案的当前版本显然比我的好,所以我接受这一版本并删除我的答案。它增加的唯一价值是注意如何避免您在文章的第一个版本中所犯的错误:函数调用必须在JOIN中,而不是直接在FROM子句中,否则会出现“missing FROM子句entry”错误。作为一个注释比作为一个单独的答案更好。我看到您接受了一个答案,但是您是否找到了一个解决方案,可以将多行传递到一个函数中?我在@JoshuaTaylor有一个类似的问题:我接受了这个问题,因为这个解决方案对我来说非常有效。我会看一看你的问题,再仔细考虑一下,如果我找到了一些解决方案,我会给我或你的问题贴上一些答案。好吧,正如在那个问题中所讨论的,我开始认为既然DB查询被优化得如此之多,这些函数实际上可能更像是在适当的地方展开的宏,所以这真的不可能。不过,我们拭目以待。。。
SELECT min(f.a)
  FROM bar  
  CROSS JOIN foo(bar.a) f
  WHERE bar.b = 1