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

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

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

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

8 ответов

Решение

В 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

Oracle будет

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

Для моего случая использованиеmax()создавал проблему с группой даже во внешнем операторе SELECT.

Так что единственное, что спасло мой день, это то, что я избегал добавления других столбцов в предложении «группа за» или использования агрегата для других столбцов. Поэтому я написал внешний оператор SELECT следующим образом:

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

Даже не имея к этому прямого отношения, я надеюсь, что это поможет другим людям.

Другие вопросы по тегам