Thread: SELECT MAX returns wrong value
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
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
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.