2017-09-02 41 views
0

使用SUM(NULLIF(V1 = V2))安全嗎? 我的目標是要知道V1對於所有行是否等於V2(可爲空),因爲我在組聲明中使用了這個,所以我想到了這一點。 有沒有其他辦法可以達到同樣的效果?Sql:SUM(NULLIF(V1 = V2))可能嗎?

+1

[NULLIF(https://docs.microsoft.com/en-us/sql/t-sql/language- elements/nullif-transact-sql)也可能返回Null。因此,有可能'SUM'可能分解或給出不正確的結果 –

+2

@我認爲SUM忽略空值。 – Broccoli

+0

我不知道'SUM'忽略NULL。在執行SUM之前,我總是使用'COALESCE'。但只是看看[這篇文章](https://stackoverflow.com/questions/37295336/is-it-safe-to-use-sum-without-isnull)。也感謝您的信息:) –

回答

0

SUM聚合之前最好使用COALESCE方法。

+1

不,不是,因爲您添加了不必要的功能。如果您關心可能的最終NULL,最好使用'COALESCE(SUM(col))'而不是'SUM(COALESCE(col,0))',前者執行COALESCE一次,後者每行執行一次。 – dnoeth

0

要確定它們是否相等的所有行,你可以這樣做:

select (1 - 
     max(case when v1 = v2 then 0 
       when v1 is null and v2 is null then 0 
       else 1 
      end) 
     ) as all_equal 
from t;