[vox-tech] postgres: run function on each row returned from select
statement
Harold Lee
harold at hotelling.net
Mon Apr 23 15:27:32 PDT 2007
Dylan Beaudette wrote:
> Is there any way to run a function, which expects a single value as an
> argument, for each row returned from a select statement? Note that this is a
> special function, used in the following way:
>
> SELECT sum(length(the_geom )) as dist_meters
> FROM
> shortest_path_as_geometry('roads', 2192, 154) ;
>
> In the above example the function "shortest_path_as_geometry" expects three
> arguments... Is there any way to feed a function like this its arguments from
> column returned from a previous select statement? Or, would this function
> have to be re-written to allow for this flexibility?
>
> thanks in advance,
>
>
You question isn't 100% clear to me, but I'm not going to let that stop
me from opining :-)
Sounds like you have some query that returns (string, roadid1, roadid2)
and you want to call the shortest_path_as_geometry function on each row
that comes back from that, then sum the length of those geometries.
Approach #1:
Change the sum_path_as_geometry function to take an array or row instead
of three value and move the shortest_path_as_geometry function into the
SELECT list, e.g.
SELECT sum(length(sum_path_as_geometry(a.c1, a.c2, a.c3)))
FROM ( SELECT c1, c2, c3 FROM ... ) a;
Approach #2:
Glue the other query and sum_path_as_geometry together with a new table
function (i.e. a function that returns a set of rows). Define the new
function to apply the sum_path_as_geometry function to the appropriate
rows and then use the new function in your query:
SELECT sum(length(the_geom)) FROM new_function();
More information about the vox-tech
mailing list