Hi.  Building on the [type]_larger and _smaller functions (and lifting from
the documentation), I put together a couple of functions that will take any
number of arguments:

CREATE FUNCTION largest(VARIADIC anyarray) RETURNS anyelement AS $$
SELECT max($1[i]) FROM generate_subscripts($1, 1) g(i);
$$ LANGUAGE SQL IMMUTABLE;

CREATE FUNCTION smallest(VARIADIC anyarray) RETURNS anyelement AS $$
SELECT min($1[i]) FROM generate_subscripts($1, 1) g(i);
$$ LANGUAGE SQL IMMUTABLE;


So far so good.  I can do smallest(2,4,7), etc.  But to take this a
convenient step further, sometimes I want the smallest or largest from
values already in an array.  So I can create these functions:

CREATE FUNCTION largest_from_array(anyarray) RETURNS anyelement AS $$
SELECT max($1[i]) FROM generate_subscripts($1, 1) g(i);
$$ LANGUAGE SQL IMMUTABLE;

CREATE FUNCTION smallest_from_array(anyarray) RETURNS anyelement AS $$
SELECT min($1[i]) FROM generate_subscripts($1, 1) g(i);
$$ LANGUAGE SQL IMMUTABLE;

That works, but ideally I'd like both of these function sets to have the
same name, and work whether called with an array or a set of values.  I
tried with

CREATE FUNCTION largest(VARIADIC anynonarray)

but get:

ERROR:  VARIADIC parameter must be an array


So here's my questions:

1)  Is there any way to collapse those four functions into two? (Or is
there a better way to go about this?)

2) Is there any particular reason functions like that aren't built into
Postgres?  They seem like they would be useful.  (Or maybe I missed them?)

3) Bonus question--how come all the existing _larger and _smaller functions
are specific to each data type, as opposed to more general smaller/larger
functions?

TIA!

Ken



-- 
AGENCY Software
A Free Software data system
By and for non-profits
*http://agency-software.org/ <http://agency-software.org/>*
*https://demo.agency-software.org/client
<https://demo.agency-software.org/client>*
ken.tan...@agency-software.org
(253) 245-3801

Subscribe to the mailing list
<agency-general-requ...@lists.sourceforge.net?body=subscribe> to
learn more about AGENCY or
follow the discussion.

Reply via email to