W MariaDB funkcja COUNT()
funkcja agregująca zwraca liczbę niezerowych wartości wyrażenia w wierszach pobranych przez SELECT
oświadczenie.
Przykładowe dane
Załóżmy, że mamy następującą tabelę:
SELECT *
FROM Pets;
Wynik:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
W poniższych przykładach zostanie użyta funkcja COUNT()
funkcja podczas odpytywania tej tabeli.
Przykład
Oto jak policzyć wiersze w powyższej tabeli:
SELECT COUNT(*)
FROM Pets;
Wynik:
8
To mówi nam, że w tabeli jest 8 wierszy. Wiemy to, ponieważ użyliśmy symbolu wieloznacznego gwiazdki (*
), aby określić wszystkie wiersze i wszystkie kolumny.
Policz konkretną kolumnę
Możesz także określić kolumnę do zliczenia. COUNT()
funkcja liczy tylko wartości inne niż NULL
wyniki, więc jeśli określisz kolumnę zawierającą NULL
wartości, te wartości nie będą liczone.
Oto przykład, aby pokazać, o co mi chodzi.
SELECT COUNT(DOB)
FROM Pets;
Wynik:
6
W tym przypadku Pets
tabela zawiera dwa NULL
wartości w DOB
kolumna (dwa zwierzęta nie podały daty urodzenia), więc COUNT(DOB)
zwraca 6, zamiast 8, gdy użyliśmy COUNT(*)
.
Powód COUNT(*)
w poprzednim przykładzie zwrócono wszystkie wiersze, ponieważ te dwa wiersze zrobiły mieć dane w innych kolumnach.
Przefiltrowane wyniki
COUNT()
funkcja zlicza wiersze zwrócone przez zapytanie. Więc jeśli filtrujesz wyniki, wynik COUNT()
odzwierciedli to.
SELECT COUNT(*)
FROM Pets
WHERE PetName = 'Fluffy';
Wynik:
2
W tym przypadku są dwa zwierzaki o imieniu Fluffy. Dlatego zapytanie zwróciłoby dwa wiersze, a wynik COUNT()
to 2
.
Policz odrębne kolumny
Mamy możliwość dodania DISTINCT
słowo kluczowe, aby określić, że zwracane są tylko różne wartości (aby wykluczyć duplikaty):
SELECT
COUNT(PetName) AS "All",
COUNT(DISTINCT PetName) AS "Distinct"
FROM Pets;
Wynik:
+-----+----------+ | All | Distinct | +-----+----------+ | 8 | 7 | +-----+----------+
W tym przypadku, mimo że istnieje osiem PetName
wartości, tylko siedem z nich jest odrębnych (dwa są duplikatami – mamy dwa zwierzaki zwane Fluffy).
HAVING
Klauzula
Możesz dołączyć COUNT()
w wielu częściach zapytania. Nie ogranicza się to tylko do SELECT
lista.
Oto przykład, w którym użyto COUNT()
zarówno w HAVING
klauzula i SELECT
lista:
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;
Wynik:
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | +-------------+---------+
Zobacz SQL COUNT()
dla początkujących, aby uzyskać bardziej szczegółowe wyjaśnienie tego przykładu, a także przykład użycia COUNT()
w funkcji okna.