Thread: SELECT MAX returns wrong value

SELECT MAX returns wrong value

From
Gavin Baumanis
Date:
Hi Everyone,

Sorry if I am missing something obvious but I think I have found a bug.
If I perform the following SQL

SELECT MAX(column) FROM table WHERE expression

and there is no match, Postgres returns a record count of 1.
There is no value in max, it is NULL.

Thus trying to perform some "other" tasks based on if a record was
returned or not is proving a little difficult in this instance.

We are using 8.1.9 on Debian.

Thanks for any help you might be able to offer.

--
If I can ever be of any further assistance, please contact me.

Gavin 'Beau' Baumanis

eClinic Pty Ltd
ABN 80 092 450 274
657 Nicholson Street
Carlton North
Victoria 3054
Australia

P: +61 3 9381 4567
F: +61 3 9381 4657

M: +61 438 545 586
E: beau@eclinic.com.au

W: http://www.eclinic.com.au



Attachment

Re: SELECT MAX returns wrong value

From
Tom Lane
Date:
Gavin Baumanis <gavinb@eclinic.com.au> writes:
> If I perform the following SQL

> SELECT MAX(column) FROM table WHERE expression

> and there is no match, Postgres returns a record count of 1.
> There is no value in max, it is NULL.

This is the behavior required by the SQL standard.

> Thus trying to perform some "other" tasks based on if a record was
> returned or not is proving a little difficult in this instance.

Test for null result, perhaps?
        regards, tom lane


Re: SELECT MAX returns wrong value

From
"Scott Marlowe"
Date:
On Dec 13, 2007 5:09 PM, Gavin Baumanis <gavinb@eclinic.com.au> wrote:
> Hi Everyone,
>
> Sorry if I am missing something obvious but I think I have found a bug.
> If I perform the following SQL
>
> SELECT MAX(column) FROM table WHERE expression
>
> and there is no match, Postgres returns a record count of 1.
> There is no value in max, it is NULL.

that's because you got one record back.  A null one, but a record none the less.

The standard way of doing this is:

select count(column) from table where expression.

since null columns don't get counted, it will return zero if they're all null.