Re: ORDER BY with exception

From: Erik Jones <erik(at)myemma(dot)com>
To: brian <brian(at)zijn-digital(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: ORDER BY with exception
Date: 2007-06-22 17:17:23
Message-ID: 59186D34-C95E-4338-87F5-3D1B3C8BD6CD@myemma.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


On Jun 21, 2007, at 8:08 PM, brian wrote:

> Michael Glaesemann wrote:
>> On Jun 21, 2007, at 17:35 , brian wrote:
>>> I have a lookup table with a bunch of disciplines:
>> To answer your ordering question first:
>> SELECT id, name
>> FROM discipline
>> ORDER BY name = 'other'
>> , name;
>> id | name
>> ----+---------------------
>> 8 | community
>> 4 | dance
>> 5 | film and television
>> 9 | fine craft
>> 7 | media arts
>> 3 | music
>> 6 | theatre
>> 2 | visual arts
>> 1 | writing
>> 10 | other
>> (10 rows)
>> This relies on the fact that FALSE orders before TRUE. I don't
>> always remember which way, so I often have to rewrite it using <>
>> or = to get the behavior I want.
>
> Of course! (slaps forehead)
>
>> I don't think you really need to use a function for this. I
>> believe you should be able to do this all in one SQL statement,
>> something like (if I've understood your query and intent correctly):
>> SELECT discipline.name, COUNT(showcase_id) AS total
>> FROM discipline
>> LEFT JOIN (
>> SELECT DISTINCT discipline_id, showcase.id as showcase_id
>> FROM showcase
>> JOIN showcase_item on (showcase.id = showcase_id)
>> WHERE accepted) AS accepted_showcases
>> ON (discipline.id = discipline_id)
>> GROUP BY discipline.name
>> ORDER BY discipline.name = 'other'
>> , discipline.name;
>> name | total
>> ---------------------+-------
>> community | 0
>> dance | 0
>> film and television | 0
>> fine craft | 0
>> media arts | 0
>> music | 0
>> theatre | 0
>> visual arts | 1
>> writing | 2
>> other | 0
>> (10 rows)
>
> That's bang on, Michael, thanks a bunch. I never remember to
> explore joining on a select. I'm forever thinking in terms of
> joining on a table. Things to study this evening.

One way to break yourself of that habit is to stop thinking in terms
of tables when you query and replace that thinking with relations.
Queries are made on relations and tables are only one kind of
relation. Then just remember that the results of select queries are
relations representing relationships between data in other relations
so they can themselves be used in select queries (as well as updates,
deletes and, as of 8.2, insert and copy statements).

Erik Jones

Software Developer | Emma®
erik(at)myemma(dot)com
800.595.4401 or 615.292.5888
615.292.0777 (fax)

Emma helps organizations everywhere communicate & market in style.
Visit us online at http://www.myemma.com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Jasbinder Singh Bali 2007-06-22 17:20:55 SPI using perl
Previous Message Joshua D. Drake 2007-06-22 17:05:17 Re: FUNCTION DEFINITION