Выберите max (x) возвращает null; как я могу заставить его вернуть 0?


Как вы возвращаете 0 вместо null при выполнении следующей команды:

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

(предполагая, что нет строки, где XID=1)

7 55

7 ответов:

в SQL 2005 / 2008:

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

или:

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

вот так (для MySQL):

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

для MSSQL заменить IFNULL С ISNULL или для использования Oracle NVL

вы также можете использовать COALESCE (выражение [ ,...n ]) - возвращает первое ненулевое значение типа:

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

Оракл будет

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

для OLEDB вы можете использовать этот запрос:

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

как будто IFNULL там не работает

зависит от того, какой продукт вы используете, но большинство поддерживает что-то вроде

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

или

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