2009-08-30 17 views
12

Czy mam rację mówiąc:MySQL COUNT() i wartości null

COUNT(expr) 
WHERE expr IS NOT * 

będą się liczyć tylko non null?

Czy COUNT(*) będzie zawsze liczyć wszystkie wiersze? A co, jeśli wszystkie kolumny mają wartość zerową?

Odpowiedz

16

Prawidłowo. COUNT (*) to wszystkie wiersze w tabeli, COUNT (wyrażenie) to miejsce, w którym wyrażenie ma wartość inną niż null.

Jeśli wszystkie kolumny mają wartość NULL (co oznacza, że ​​nie ma klucza podstawowego, więc nie powinno się to zdarzyć w znormalizowanej bazie danych) COUNT (*) nadal zwraca wszystkie wstawione wiersze. Po prostu tego nie rób.

Możesz myśleć o symbolu * oznaczającym "w tabeli", a nie "w dowolnej kolumnie".

+0

Czy istnieje jakiś sposób, aby liczyć null też z count (wyrażenie)? –

+0

Jeśli wykonasz COUNT (*), wszystkie wiersze są liczone bez względu na zawartość tych wierszy. Jeśli chcesz zobaczyć zarówno sumy wierszy *, jak i * liczbę wierszy z wartościami dla SomeColumn, wykonaj SELECT COUNT (*) jako AllRows, COUNT (SomeColumn) jako SomeColumnCount. AllRows będą całkowitymi wierszami zwróconymi przez zapytanie, a SomeColumnCount będzie liczbą wierszy, w których wartość SomeColumn ma. – Godeke

2

count(*) nie jest dla niepustych kolumn, jest to po prostu sposób na zliczanie wszystkich wierszy. Z grubsza odpowiada count(1).

4

tylko sprawdzone:

select count (*)

zwraca 1 z jednego rekordu wypełniona znakiem null

select count (pole)

zwraca 0.

I don nie widzisz punktu w rekordzie z wartościami NULL. Taki zapis nie może istnieć.

+0

"Nie widzę punktu w rekordzie z wartościami NULL". Och, po prostu przyszło mi to do głowy. teraz, kiedy to mówisz, uznałem, że masz rację, nie myślałem o tym, gdy pytałem. – iceangel89

12

Jeśli chcesz liczyć null również, spróbuj

SELECT COUNT(IFNULL(col, 1)) FROM table; 
+0

Świetny dodatek @Roey –

Powiązane problemy