Thread: Sorting by NULL values

Sorting by NULL values

From
Ian Burrell
Date:
I am doing a query where I need to sort by a column that may be NULL 
because it is coming from an OUTER JOIN.  I noticed a difference between
PostgreSQL and other databases about where NULLs show up.  It seems that 
with Postgres, NULLs are sorted after other values.  Other databases 
sort them before.

Is there any standard on how sorting NULLs work?  Is there a way to 
change Postgres's behavior?  Is there a way to replace the NULLs with 
empty strings?

This is my query:

SELECT product_id
FROM product p
LEFT OUTER JOIN attribute_data ad
ON p.product_id= ad.product_id
AND ad.attribute_id = ?
WHERE p.category_id = ?
ORDER BY data;

The tables look like:

CREATE TABLE product (   product_id serial NOT NULL PRIMARY KEY,   category_id integer NOT NULL
);

CREATE TABLE attribute_data (   attribute_id integer NOT NULL,   product_id integer NOT NULL,   data varchar(1024),
PRIMARYKEY (attribute_id, product_id)
 
);
 - Ian



Re: Sorting by NULL values

From
Dan Langille
Date:
On Tue, 4 Mar 2003, Ian Burrell wrote:

> Is there any standard on how sorting NULLs work?  Is there a way to
> change Postgres's behavior?  Is there a way to replace the NULLs with
> empty strings?

I think what you want may be either COALESCE or ISNULL/IFNULL or perhaps a
CASE statement.


Re: Sorting by NULL values

From
Tomasz Myrta
Date:
Ian Burrell wrote:
> I am doing a query where I need to sort by a column that may be NULL 
> because it is coming from an OUTER JOIN.  I noticed a difference between
> PostgreSQL and other databases about where NULLs show up.  It seems that 
> with Postgres, NULLs are sorted after other values.  Other databases 
> sort them before.
> 
> Is there any standard on how sorting NULLs work?  Is there a way to 
> change Postgres's behavior?  Is there a way to replace the NULLs with 
> empty strings?
order by field is null asc/desc, field asc/desc

Regards,
Tomasz Myrta



Re: Sorting by NULL values

From
Stephan Szabo
Date:
On Tue, 4 Mar 2003, Ian Burrell wrote:

> I am doing a query where I need to sort by a column that may be NULL
> because it is coming from an OUTER JOIN.  I noticed a difference between
> PostgreSQL and other databases about where NULLs show up.  It seems that
> with Postgres, NULLs are sorted after other values.  Other databases
> sort them before.

> Is there any standard on how sorting NULLs work?  Is there a way to

IIRC, they're either considered greater than or less than non-NULL values,
but the decision is up to the implementation.

> change Postgres's behavior?  Is there a way to replace the NULLs with
> empty strings?

Coalesce should work.





Re: Sorting by NULL values

From
Josh Berkus
Date:
Ian,

> I am doing a query where I need to sort by a column that may be NULL
> because it is coming from an OUTER JOIN.  I noticed a difference between
> PostgreSQL and other databases about where NULLs show up.  It seems that
> with Postgres, NULLs are sorted after other values.  Other databases
> sort them before.

Not all other databases.   It really depends.

> Is there a way to replace the NULLs with
> empty strings?

Sure: UPDATE table SET column = '' WHERE column IS NULL

--
Josh Berkus
josh@agliodbs.com
Aglio Database Solutions
San Francisco


Re: Sorting by NULL values

From
Rod Taylor
Date:
On Tue, 2003-03-04 at 15:13, Stephan Szabo wrote:
> On Tue, 4 Mar 2003, Ian Burrell wrote:
>
> > I am doing a query where I need to sort by a column that may be NULL
> > because it is coming from an OUTER JOIN.  I noticed a difference between
> > PostgreSQL and other databases about where NULLs show up.  It seems that
> > with Postgres, NULLs are sorted after other values.  Other databases
> > sort them before.
>
> > Is there any standard on how sorting NULLs work?  Is there a way to

If you care, order by their boolean equivelent first:

order by field is null desc, field

DESC puts nulls first, since true > false

> IIRC, they're either considered greater than or less than non-NULL values,
> but the decision is up to the implementation.
>
> > change Postgres's behavior?  Is there a way to replace the NULLs with
> > empty strings?
>
> Coalesce should work.
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
--
Rod Taylor <rbt@rbt.ca>

PGP Key: http://www.rbt.ca/rbtpub.asc