2012-03-12 76 views
2

我做了一堆和查詢的任何結果:SELECT col1 + col2 + col3 + ...PostgreSQL的 - 排除與空

一些在某些列的值都是零。我正在檢查他們

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

我想知道是否有一個更簡潔的語法來完成此任務。

回答

4

好吧,既然,你可以這樣做以下(具有明顯的...填寫):

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; 
+0

哦,謝謝。我在我的腦海裏,1 + null等於1.我想我已經編程了太多的JavaScript。 – canisrufus 2012-03-12 19:26:25

+0

@canisrufus - 你是最受歡迎的。如果您發現我的答案有幫助,請考慮通過點擊我答案旁邊的upvote/downvote箭頭下方的複選標記來接受它。 – 2012-03-12 19:31:24

+1

;)SO不會讓我選擇前15分鐘的答案。 – canisrufus 2012-03-12 19:34:09

3

使用COALESCE功能,如果你能接受一個NULL值將作爲0

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

也許你可以考慮使用0作爲默認值而不是NULL(如果適用)。

+0

感謝您的建議。在我的情況下,null是未指定的值,其中零爲零值。 – canisrufus 2012-03-12 19:31:31

1

你可以有更簡單:

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

中表達將返回NULL如果(且僅當)有測試值(和不匹配)中的至少一個NULL值。因此,如果(且僅當)不存在NULL,則整個表達式的計算結果爲TRUE。

編輯:我得糾正自己!正匹配將停止評估並返回TRUE,即使NULL是其中的值。所以你需要一個值得保證不會在集合中。類似於0,其中所有值均爲> 0或-1,其中所有值均爲正值,或者不能將此表達式用於此目的。