2011-10-30 15 views

Odpowiedz

7

Wszystkie funkcje agregujące zwracają coś, nawet jeśli nic nie zostanie znalezione, po prostu dlatego, że niejawnie grupują wszystkie (dowolne) wiersze w tabeli, aby uzyskać wartość zagregowaną. Weź count na przykład:

sqlite> create table foo (a int not null); 
sqlite> select count(a) from foo; 
0 

null jest min jak 0 jest count gdzie są zwracane żadne wiersze.

Może to być przydatna właściwość. Rozważmy następujący przykład:

sqlite> select ifnull(min(a), "I'm null") from foo; 
I'm null 

Jeśli chcesz filtrować tę sprawę więc nie rekordy są zwracane, można użyć klauzuli HAVING (i sprawiają, że grupowanie jawne):

sqlite> select min(a) as min_a from foo group by a having min_a not null; 
+0

Hmm. Czy istnieje sposób, aby nie zwracać niczego zamiast "oznaczania" wartości zerowej? – David

+0

Tak ... używając 'mając'. Zobacz moją zaktualizowaną odpowiedź, aby uzyskać więcej informacji. –