V MariaDB, COUNT()
agregační funkce vrací počet hodnot výrazu, které nejsou NULL, v řádcích načtených pomocí SELECT
prohlášení.
Ukázková data
Předpokládejme, že máme následující tabulku:
SELECT *
FROM Pets;
Výsledek:
+-------+-----------+---------+---------+------------+ | 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 | +-------+-----------+---------+---------+------------+
Následující příklady budou používat COUNT()
funkce při dotazu na tuto tabulku.
Příklad
Zde je návod, jak počítat řádky ve výše uvedené tabulce:
SELECT COUNT(*)
FROM Pets;
Výsledek:
8
To nám říká, že v tabulce je 8 řádků. Víme to, protože jsme použili zástupný znak hvězdička (*
) specifikovat všechny řádky a všechny sloupce.
Počítání konkrétního sloupce
Můžete také určit sloupec, který se má počítat. COUNT()
funkce počítá pouze jiné než NULL
výsledky, takže pokud zadáte sloupec, který obsahuje NULL
hodnoty, tyto hodnoty se nebudou počítat.
Zde je příklad, který demonstruje, co tím myslím.
SELECT COUNT(DOB)
FROM Pets;
Výsledek:
6
V tomto případě Pets
tabulka obsahuje dvě NULL
hodnoty v DOB
sloupec (dva domácí mazlíčci neuvedli své datum narození), a tak COUNT(DOB)
vrátí 6 místo 8, když jsme použili COUNT(*)
.
Důvod COUNT(*)
v předchozím příkladu vrátil všechny řádky, protože tyto dva řádky uvedly mít data v ostatních sloupcích.
Filtrované výsledky
COUNT()
Funkce počítá řádky vrácené dotazem. Pokud tedy filtrujete výsledky, výsledek COUNT()
to bude odrážet.
SELECT COUNT(*)
FROM Pets
WHERE PetName = 'Fluffy';
Výsledek:
2
V tomto případě jsou to dva mazlíčci se jménem Fluffy. Dotaz by tedy vrátil dva řádky a výsledek COUNT()
je 2
.
Počítání odlišných sloupců
Máme možnost přidat DISTINCT
klíčové slovo, které určí, že budou vráceny pouze odlišné hodnoty (takže se vyloučí duplikáty):
SELECT
COUNT(PetName) AS "All",
COUNT(DISTINCT PetName) AS "Distinct"
FROM Pets;
Výsledek:
+-----+----------+ | All | Distinct | +-----+----------+ | 8 | 7 | +-----+----------+
V tomto případě, i když existuje osm PetName
hodnoty, pouze sedm z nich je odlišných (dva jsou duplikáty – máme dva mazlíčky zvané Fluffy).
Položka HAVING
Ustanovení
Můžete zahrnout COUNT()
ve více částech dotazu. Není omezeno pouze na SELECT
seznam.
Zde je příklad, který používá COUNT()
v obou HAVING
klauzule a SELECT
seznam:
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;
Výsledek:
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | +-------------+---------+
Viz SQL COUNT()
pro začátečníky, kde najdete podrobnější vysvětlení tohoto příkladu a také příklad použití COUNT()
ve funkci okna.