Při práci s databázemi někdy chcete zjistit, kolik řádků bude vráceno dotazem, aniž byste skutečně vrátili výsledky dotazu. Nebo někdy můžete chtít zjistit, kolik řádků je v dané tabulce.
Na serveru SQL Server můžete použít COUNT()
T-SQL funkce, která vrátí počet řádků, které by byly vráceny v dotazu.
Data
Zde jsou data, která použijeme v příkladech na této stránce:
SELECT *FROM Tasks;
Výsledek:
TaskId TaskName TaskDescription TaskCode------ ------------ --------------- --------1 Zdroj kočky TBA null 2 Vodní pes TBA null 3 Krmná zahrada TBA null 4 Lakový koberec TBA null 5 Čistá střecha TBA null 6 Krmné kočky TBA null
Příklad – Počítání všech řádků v tabulce
Zde je příklad použití COUNT()
funkce, která vrátí celkový počet řádků v tabulce:
SELECT COUNT(*)FROM Tasks;
Výsledek:
6
Tím se vrátí počet řádků v tabulce, protože jsme neposkytli žádná kritéria pro zúžení výsledků.
Příklad – Přidání kritérií
Zde je příklad počítání, kolik řádků by bylo vráceno na základě daných kritérií:
SELECT COUNT(*)FROM TasksWHERE TaskName LIKE '%dog%' OR TaskName LIKE '%cat%';
Výsledek:
3
Příklad – Zadejte jeden sloupec
Všechny předchozí příklady používají hvězdičku k použití počtu na všechny sloupce. Máte také možnost určit konkrétní sloupec.
Příklad:
SELECT COUNT(TaskName)FROM Tasks;
Výsledek:
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(TaskCode)FROM Tasks;
Výsledek:
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, který vrací pouze počet jedinečných (nenull) hodnot.
Možná jste si všimli, že každý řádek v našem TaskDescription
obsahuje stejnou hodnotu (“TBA”). A TaskName
sloupec má také 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:
5
A zde se použije proti TaskDescription
tabulka (kde jsou všechny hodnoty totožné):
SELECT COUNT(DISTINCT TaskDescription)FROM Tasks;
Výsledek:
1
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.
Příklad:
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:
Název interpreta Počet alb------------------------- -----------Allan Holdsworth 2 Devin Townsend 3 Iron Maiden 5 Michael Learns to Rock 3 Tom Jones 3Tento příklad používá jinou databázi než předchozí příklady. Vrací pouze ty umělce, kteří vydali více než 1 album. Toto číslo bychom mohli změnit, kolik alb chceme:
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:
Počet alb jménem ArtistName------------------------ -----------Iron Maiden 5Funkce COUNT_BIG()
T-SQL má také
COUNT_BIG()
funkce, která funguje přesně jakoCOUNT()
, kroměCOUNT()
vrátí int datový typ aCOUNT_BIG()
vrátí bigint datový typ.Tato funkce může být užitečná pro indexovaná zobrazení se seskupenými dotazy. Možná zjistíte, že když se pokusíte vytvořit index pro pohled, který obsahuje
COUNT(*)
, že se zobrazí tato chyba:Nelze vytvořit index v zobrazení „Music.dbo.AlbumsByArtist“, protože používá agregovaný COUNT. Místo toho použijte COUNT_BIG.V takových případech změňte pohled tak, aby používal
COUNT_BIG(*)
by měl problém vyřešit.