2010-11-18 11 views
2

Ich versuche Aggregationen in Case-Anweisung zu tun. Ich habe 2 Möglichkeiten gefunden, es zu tun. Kann jemand sagen, was der Unterschied zwischen den 2 ist?Aggregationen in Case-Anweisung

  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

Antwort

2

Es gibt keinen signifikanten Unterschied. Sie können für sich entscheiden, was besser ist, indem Sie ihre Ausführungspläne vergleichen.

3

Besser wäre:

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

Da 1) für Zählung eigenen standart Zähler verwendet, 2) "else" nicht benötigen (zählen nicht NULL-Werte zählen)

Grüße, Sayan M.

+0

Auch Ihre erste Variante für die Gruppe von nur Ereignisse und zweiten flexibler und in vielen Varianten verwendet werden könnte, und mit analytischen Funktionen –

+0

Sie könnten dies auch mit Dekodieren anstatt mit Groß-/Kleinschreibung tun. count (decode (Event, 5,1)) Wie Follow_Count –

+0

Ich weiß, aber es ist gleich (außer Nullen, die nicht in der Bedingung verwendet werden). Also habe ich entschieden, den Fall so zu lassen, wie es ist. –

5

Ihr Fall 1 erzeugt eine Zeile für jedes Ereignis in der Tabelle (aus Ihrer Gruppe von). Dein Fall 2 wird nur eine Zeile zurückgeben.

Gibt es einen Grund, dass Sie nicht nur schreiben würden: preferrable

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