如何在查询结果上运行函数?

时间:2016-01-12 05:29:27

标签: sql postgresql

我有一个问题:

select a,b,c,d
from x
join y using (id)
join z using (id2)
where....

此查询提供了许多行。 我想在查询的每一行上运行func2(a,b,c,d)

我试过了:

with B as (
    select a,b,c,d
    from x
    join y using (id)
    join z using (id2)
    where....)
select func2(a,b,c,d)
from B

但它不起作用。我不确定WITH是否是正确的解决方案。

2 个答案:

答案 0 :(得分:3)

您只需在select中运行该功能即可。这将循环返回的每一行。请尝试以下方式:

select func2(a,b,c,d)
from x
join y using (id)
join z using (id2)
where....

答案 1 :(得分:1)

可以在选择查询中使用某个功能

例如

create table t(a int,b int);
insert into t select generate_series(1,5), generate_series(5,5);

如果你有类似下面的功能

create function fn(val int,val1 int) returns integer
as
$$
select $1+$2;
$$
language sql 

用法:

select fn(1,2)

结果:

fn 
-- 
3  

(1 row(s) affected)

与将其与选择查询

一起使用的方式相同
select a,b,fn(a,b) 
from t

结果:

a b fn 
- - -- 
1 5 6  
2 5 7  
3 5 8  
4 5 9  
5 5 10 

(5 row(s) affected)

另一方面你的WITH查询应该有效我猜这个问题是别的什么

请参阅此demo