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)
Даже не имея к этому прямого отношения, я надеюсь, что это поможет другим людям.