sql >> Databáze >  >> RDS >> Sqlserver

Jak vrátit počet řádků ve výsledku dotazu na serveru SQL Server

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 3

Tento 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 5

Funkce COUNT_BIG()

T-SQL má také COUNT_BIG() funkce, která funguje přesně jako COUNT() , kromě COUNT() vrátí int datový typ a COUNT_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.


  1. Nějaký dopad na výkon v Oracle při použití LIKE 'string' vs ='string'?

  2. Jaké je očekávané chování pro více funkcí vracejících sadu v klauzuli SELECT?

  3. JSON_LENGTH() – Vrátí délku dokumentu JSON v MySQL

  4. Jak najít a zamaskovat PII v Elasticsearch