2010-11-18 70 views
2

我想在case語句中進行彙總。我找到了兩種方法來做到這一點。任何人都可以說2之間的區別是什麼?彙總在case語句

  1. (CASE WHEN Event = 5 THEN count(*) ELSE 0 END) Follow_Count GROUP BY Event;

  2. SUM(CASE Event WHEN 5 THEN 1 ELSE 0 END) AS Follow_Count

回答

2

沒有顯著差異。通過比較執行計劃,您可以爲您決定哪個更好。

3
更好

是:

count(CASE Event WHEN 5 THEN 1 END) AS Follow_Count 

因爲 1)計數用自己的非標準計數器, 2) 「其他」 不需要(算不算空值)

問候, 薩揚M.

+0

另外,你的第一個變種preferrable爲組僅事件,二更靈活,可以在多種變體使用,並與解析函數 – 2010-11-18 03:10:33

+0

你也可以用解碼而不是情況來做到這一點。計數(解碼(事件,5,1))作爲Follow_Count – 2010-11-18 03:48:50

+0

我知道,但它是平等的(除了空值,這是不使用的條件)。所以我決定離開大小寫。 – 2010-11-18 05:32:20

5

您的案例1將針對表中的每個事件(從您的羣組獲取)生成一行。你的情況2將只返回1行。

是否有一個原因,你會不會只是寫:

select count(*) 
from my_table 
where event = 5;