84

How do you return 0 instead of null when running the following command:

SELECT MAX(X) AS MaxX
FROM tbl
WHERE XID = 1

(Assuming there is no row where XID=1)

0

8 Answers 8

119

or:

SELECT coalesce(MAX(X), 0) AS MaxX
FROM tbl
WHERE XID = 1
0
89

In SQL 2005 / 2008:

SELECT ISNULL(MAX(X), 0) AS MaxX
FROM tbl WHERE XID = 1
30

Like this (for MySQL):

SELECT IFNULL(MAX(X), 0) AS MaxX
FROM tbl
WHERE XID = 1

For MSSQL replace IFNULL with ISNULL or for Oracle use NVL

3
  • In SQL Server it would be ISNULL. I don't know if it is a typo or a valid command in other SQL dialects.
    – Konamiman
    Commented Nov 6, 2009 at 16:34
  • 1
    The OP doesn't specify: MySQL uses IFNULL
    – Greg
    Commented Nov 6, 2009 at 16:35
  • I was, possibly incorrectly, assuming SQL Server! So of course, you may NOT have meant ISNULL!!
    – AdaTheDev
    Commented Nov 6, 2009 at 16:36
13

You can also use COALESCE ( expression [ ,...n ] ) - returns first non-null like:

SELECT COALESCE(MAX(X),0) AS MaxX
FROM tbl
WHERE XID = 1
5

Oracle would be

SELECT NVL(MAX(X), 0) AS MaxX
FROM tbl
WHERE XID = 1;
3

For OLEDB you can use this query:

select IIF(MAX(faculty_id) IS NULL,0,MAX(faculty_id)) AS max_faculty_id from faculties;

As IFNULL is not working there

0
2

Depends on what product you're using, but most support something like

SELECT IFNULL(MAX(X), 0, MAX(X)) AS MaxX FROM tbl WHERE XID = 1

or

SELECT CASE MAX(X) WHEN NULL THEN 0 ELSE MAX(X) FROM tbl WHERE XID = 1
0

For my case using max() was creating problem with group by even on outer SELECT statement.

So only thing that saved my day was following by avoiding adding other columns in group by clause or using aggregate on other columns. So I wrote on outer SELECT statement as following:

SELECT username, case when total_post_comments is null then 0 else total_post_comments end total_post_comment FROM (subquery)

Even not directly related to this I hope it will help other people.

Not the answer you're looking for? Browse other questions tagged or ask your own question.