MySQL obsahuje COUNT()
funkce, která vám umožní zjistit, kolik řádků by bylo vráceno z dotazu. Tato funkce je součástí standardu SQL a lze ji použít s většinou systémů pro správu relačních databází.
COUNT()
funkci lze v případě potřeby také použít k ovlivnění výsledků dotazu, například pouze vrácením těch výsledků, které mají počet řádků větší než dané množství.
Tento článek obsahuje příklady COUNT()
použití v MySQL.
Data
Nejprve zde jsou data, která použijeme pro příklady na této stránce:
SELECT *FROM Tasks;
Výsledek:
+--------+------------------+----------------- +| TaskId | Název úkolu | Popis úkolu |+--------+-------------------+-----------------+ | 1 | Do zahrady | NULL || 2 | Krmte kočky | NULL || 3 | Nátěr střechy | NULL || 4 | Vezměte psa na procházku | NULL || 5 | Relax | NULL || 6 | Krmte kočky | NULL |+--------+-------------------+-----------------+
Spočítat všechny řádky v tabulce
Můžete použít COUNT()
vrátíte celkový počet řádků v tabulce:
SELECT COUNT(*)FROM Tasks;
Výsledek:
+-----------+| POČET(*) |+----------+| 6 |+----------+
Tím se vrátí počet řádků v tabulce, protože jsme neposkytli žádná kritéria pro zúžení výsledků.
Zúžit výsledky
Když přidáme WHERE
klauzule, která zužuje výslednou množinu, dostaneme menší číslo:
SELECT COUNT(*)FROM TasksWHERE TaskName LIKE '%cat%';
Výsledek:
+-----------+| POČET(*) |+----------+| 2 |+----------+
Jeden sloupec versus hvězdička (*)
Všechny předchozí příklady používají hvězdičku k použití počtu na všechny sloupce. Stejně jako u každého dotazu je hvězdička volitelná a používá se jako zástupný znak pro vrácení všech sloupců. Takže při použití COUNT()
funkce, máte také možnost zadat konkrétní sloupce (na rozdíl od všech sloupců) jako argument.
Příklad:
SELECT COUNT(TaskName)FROM Tasks;
Výsledek:
+------------------+| POČET(Název úkolu) |+-----------------+| 6 |+-----------------+
I když tento příklad vrací stejný výsledek, jaký jsme dostali, když jsme použili hvězdičku, nemusí tomu tak být vždy. Zde je například uvedeno, co se stane, pokud zadáme jiný sloupec:
SELECT COUNT(TaskDescription)FROM Tasks;
Výsledek:
+------------------------+| POČET(Popis úlohy) |+------------------------+| 0 |+------------------------+
V tomto případě dostaneme nulu, protože tento konkrétní sloupec obsahuje hodnoty null v každém řádku.
Příklad – Odlišné
Můžete přidat DISTINCT
argument k vrácení pouze počtu řádků s různou hodnotou, která není NULL
hodnoty.
Možná jste si všimli, že TaskName
sloupec má duplicitní hodnotu ("Krmíme kočky" se objeví dvakrát). To může způsobit problémy, pokud nechcete, aby se duplikáty započítávaly.
Takto to vypadá, když použijeme DISTINCT
argument k TaskName
sloupec:
SELECT COUNT(DISTINCT TaskName)FROM Tasks;
Výsledek:
+--------------------------+| POČET(ODLIŠNÝ název úkolu) |+--------------------------+| 5 |+--------------------------+
Přestože tabulka obsahuje šest řádků, dva z nich jsou duplikáty. Proto se tyto dva počítají jako jedna, dostaneme výsledek pět.
Příklad – Klauzule HAVING
Můžete také použít COUNT()
pomocí HAVING
klauzule k omezení sady výsledků na základě počtu řádků, které by byly vráceny.
Zde je příklad používající jinou datovou sadu než předchozí příklady:
USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'AlbumName'FROM Interpreti arINNER JOIN Alba al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1; před>Výsledek:
+------------------------+-------------+| Jméno umělce | Počet alb |+------------------------+-------------+| Iron Maiden | 5 || Devin Townsend | 3 || Michael se učí rockovat | 3 || Tom Jones | 3 || Allan Holdsworth | 2 |+------------------------+-------------+Tento dotaz vrátí pouze ty interprety, kteří vydali více než 1 album. Zde je to, co se stane, když zvýšíme hodnotu v
HAVING
klauzule:USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'AlbumName'FROM Interpreti arINNER JOIN Alba al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 4;Výsledek:
+-------------+-------------+| Jméno umělce | Počet alb |+-------------+-------------+| Iron Maiden | 5 |+-------------+-------------+