pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Aaron Bono <postgresql@aranya.com>
To: Bryce Nesbitt <bryce1@obviously.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: Can function results be used in WHERE?
Date: Mon, 10 Jul 2006 22:21:34 -0500
Message-ID: <bf05e51c0607102021i73ae93bey15f31a8ef91d007f@mail.gmail.com> (raw)
In-Reply-To: <44B2EFBC.1090201@obviously.com>
References: <44B29376.2030107@obviously.com>
	<bf05e51c0607101302w271c7773tdec47e76b192f2c9@mail.gmail.com>
	<44B2CFC7.7060101@obviously.com>
	<bf05e51c0607101533ld2ee15fm4cff4f7ce23a320a@mail.gmail.com>
	<44B2EFBC.1090201@obviously.com>

On 7/10/06, Bryce Nesbitt <bryce1@obviously.com> wrote:
>
> Aaron Bono wrote:
> >
> >
> > On 7/10/06, *Bryce Nesbitt* <bryce1@obviously.com
> > <mailto:bryce1@obviously.com>> wrote:
> >
> >
> >     I think it is ugly also, but no other syntax seems to work:
> >
> >     stage=# select
> >     pod_code,lat,lon,calculate_distance(lat,lon,37.789629,-122.422082)
> as
> >     dist from eg_pod where dist < 1 order by dist desc limit 10;
> >     ERROR:  column "dist" does not exist
> >
> >
> > SELECT
> >    pod_code,
> >    lat,
> >    lon,
> >    calculate_distance(lat,lon,37.789629,-122.422082) as dist
> > FROM eg_pod
> > WHERE calculate_distance(lat,lon, 37.789629,-122.422082) < 1
> > ORDER BY calculate_distance(lat,lon,37.789629,-122.422082) desc limit
> 10;
> Yep, that works.  I guess with IMMUTABLE it's even effecient.
> But I have to pass 6 arguments, not 2.  Is there a way to make it look
> cleaner?
> I had expected using the column label (e.g. "dist") to work with WHERE,
> just as it does with ORDER BY.


You can also try

SELECT
   pod_code,
   lat,
   lon,
   dist
FROM (
   SELECT
      pod_code,
      lat,
      lon,
      calculate_distance(lat,lon,37.789629,-122.422082) as dist
   FROM eg_pod
) eg_prod
WHERE dist < 1
ORDER BY dist desc limit 10;

If the 37.789629 and -122.422082 are static values you can create a view for
it.  Otherwise you can create a function or stored procedure that takes 2
arguments and returns the results of the subquery.

Just some options.  Not sure which you would prefer.  I am sure there are
more ways to do it.

-Aaron Bono

view thread (10+ messages)  latest in thread

Message-ID: <bf05e51c0607102021i73ae93bey15f31a8ef91d007f@mail.gmail.com>
Permalink:  ../bf05e51c0607102021i73ae93bey15f31a8ef91d007f@mail.gmail.com/
Also on:    postgresql.org/message-id/bf05e51c0607102021i73ae93bey15f31a8ef91d007f@mail.gmail.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: postgresql@aranya.com, bryce1@obviously.com
  Subject: Re: Can function results be used in WHERE?
  In-Reply-To: <bf05e51c0607102021i73ae93bey15f31a8ef91d007f@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox