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ą?
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ą?
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".
count(*)
nie jest dla niepustych kolumn, jest to po prostu sposób na zliczanie wszystkich wierszy. Z grubsza odpowiada count(1)
.
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ć.
"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
Jeśli chcesz liczyć null również, spróbuj
SELECT COUNT(IFNULL(col, 1)) FROM table;
Świetny dodatek @Roey –
Czy istnieje jakiś sposób, aby liczyć null też z count (wyrażenie)? –
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