postgresql - исключить любой результат с нулями - PullRequest
4 голосов
/ 12 марта 2012

Я делаю несколько запросов на сумму: SELECT col1 + col2 + col3 + ...

Некоторые значения в некоторых столбцах равны нулю.Я проверяю их, выполняя

SELECT CASE WHEN col1 is not null and col2 is not null and ...

Мне интересно, есть ли более краткий синтаксис для выполнения этой задачи.

Ответы [ 3 ]

8 голосов
/ 12 марта 2012

Ну, так как сумма любого числа и null равна null, вы можете сделать что-то вроде следующего (с заполненным очевидным ...):

select big_honking_sum
from(
    select col1+col2+col3+...+coln as big_honking_sum
    from some_table
)sum
where big_honking_sum is not null;
4 голосов
/ 12 марта 2012

Используйте функцию COALESCE, если вы можете принять, что значение NULL будет обрабатываться как 0.

SELECT COALESCE(Col1,0)
      + COALESCE(Col2,0)
      + COALESCE(Col3,0)
      AS TOTAL FROM table;

Возможно, вы могли бы рассмотреть возможность использования 0 в качестве значения по умолчанию вместо NULL, если применимо.

1 голос
/ 12 марта 2012

Вы можете сделать это еще проще:

SELECT foo
FROM   ...
WHERE  (-1 IN (col1, col2, col3)) IS NOT NULL

Выражение IN вернет NULL, если (и только если) есть хотя бы одно значение NULL среди протестированных значений (и не соответствует).Таким образом, все выражение оценивается как ИСТИНА, если (и только если) нет NULL.

Редактировать: Я должен исправить себя!Положительное совпадение остановит оценку и вернет TRUE, даже если среди значений есть NULL.Таким образом, вам нужно значение, которое гарантированно не будет в наборе.Например, 0, где все значения> 0 или -1, где все значения положительные или вы не можете использовать это выражение для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...