Jaka jest różnica między COUNT(CASE WHEN [Column A] = ____ THEN 1 END
i COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END
?
Korzystałem z tego pierwszego i do tej pory nie widziałem różnicy; jaki jest powód dodania ELSE 0
- czy są sytuacje, w których SQL Server będzie niepoprawnie liczyć?
sql-server
sql-server-2008
koburne
źródło
źródło
Odpowiedzi:
Po prostu w pierwszym przypadku liczysz 1s i NULLs. (NULL jest zwracane, jeśli żaden z warunków instrukcji CASE nie jest zgodny i nie ma klauzuli ELSE.) Wartości NULL nie są liczone. W drugim przypadku 1 i 0. 0 można policzyć.
Szybki przykład:
Wynik:
źródło
Jeśli nie określisz instrukcji else część do case, wówczas domyślnie zwróci NULL, aw twoim przypadku jest to dobre, ponieważ count policzy wartości inne niż NULL. Jeśli zwrócisz cokolwiek innego z przypadku, nie ma znaczenia, czy będzie to 1, 0 czy 2, zawsze będzie liczony jako 1.
Jeśli użyjesz sumy zamiast zliczania, powinieneś zwrócić 1 lub 0.
źródło