l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
April 21: Google Glass
Next Installfest:
TBD
Latest News:
Mar. 18: Google Glass at LUGOD's April meeting
Page last updated:
2007 Apr 26 08:47

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] postgres: run function on each row returned from selectstatement
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] postgres: run function on each row returned from selectstatement



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();
_______________________________________________
vox-tech mailing list
vox-tech@lists.lugod.org
http://lists.lugod.org/mailman/listinfo/vox-tech



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
EDGE Tech Corp.
For donating some give-aways for our meetings.