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

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

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

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

Ответ 1

В SQL 2005/2008:

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

Ответ 2

или

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

Ответ 3

Подобно этому (для MySQL):

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

Для MSSQL замените IFNULL на ISNULL или для Oracle используйте NVL

Ответ 4

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

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

Ответ 5

Oracle будет

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

Ответ 6

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

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

Поскольку IFNULL не работает там

Ответ 7

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

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