sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan returneres antallet af rækker i et forespørgselsresultat i SQL Server

Når du arbejder med databaser, vil du nogle gange gerne finde ud af, hvor mange rækker der returneres af en forespørgsel, uden faktisk at returnere resultaterne af forespørgslen. Eller nogle gange vil du måske bare finde ud af, hvor mange rækker der er i en given tabel.

I SQL Server kan du bruge T-SQLs COUNT() funktion til at returnere antallet af rækker, der ville blive returneret i en forespørgsel.

Dataene

Her er de data, vi vil bruge i eksemplerne på denne side:

VÆLG *FRA Opgaver;

Resultat:

TaskId Opgavenavn Opgavebeskrivelse Opgavekode------ ------------ -----------------------1 feed katte TBA null 2 ​​Vandhund TBA null 3 Foderhave TBA null 4 Maletæppe TBA null 5 Rent tag TBA null 6 Foderkatte TBA null 

Eksempel – Tæl alle rækker i en tabel

Her er et eksempel på brug af COUNT() funktion til at returnere det samlede antal rækker i en tabel:

VÆLG ANTAL(*)FRA opgaver;

Resultat:

6 

Dette returnerer antallet af rækker i tabellen, fordi vi ikke har angivet nogen kriterier til at indsnævre resultaterne.

Eksempel – Tilføjelse af kriterier

Her er et eksempel på at tælle, hvor mange rækker der ville blive returneret baseret på et givet kriterium:

VÆLG ANTAL(*) FRA Opgaver WHERE Opgavenavn SOM '%dog%' ELLER Opgavenavn SOM '%cat%';

Resultat:

3

Eksempel – Angiv en enkelt kolonne

De foregående eksempler bruger alle en stjerne til at anvende tællingen på alle kolonner. Du har også mulighed for at angive en specifik kolonne.

Eksempel:

VÆLG ANTAL(TaskName)FRA Opgaver;

Resultat:

6

Selvom dette eksempel returnerer det samme resultat, som vi fik, da vi brugte stjernen, vil det ikke nødvendigvis altid være tilfældet. For eksempel, her er hvad der sker, hvis vi angiver en anden kolonne:

VÆLG ANTAL(TaskCode)FRA Opgaver;

Resultat:

0

I dette tilfælde får vi nul, fordi den pågældende kolonne indeholder nulværdier i hver række.

Eksempel – Distinkt

Du kan tilføje DISTINCT argument for kun at returnere antallet af unikke (ikke-null) værdier.

Du har måske bemærket, at hver række i vores TaskDescription kolonne indeholder den samme værdi ("TBA"). Og TaskName kolonne har også en dubletværdi ("Foderkatte" vises to gange). Dette kan give problemer, hvis du ikke ønsker, at dubletter skal tælles med.

Sådan ser det ud, hvis vi anvender DISTINCT argument til TaskName kolonne:

VÆLG ANTAL(DISTINCT TaskName)FROM Tasks;

Resultat:

5

Og her anvendes det mod TaskDescription tabel (hvor alle værdier er identiske):

SELECT COUNT(DISTINCT TaskDescription)FROM Tasks;

Resultat:

1

Eksempel – HAVING-klausulen

Du kan også bruge COUNT() med HAVING klausul for at begrænse et resultatsæt baseret på antallet af rækker, der ville blive returneret.

Eksempel:

BRUG musik;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artists arINNER JOIN Albums al PÅ ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1; 

Resultat:

ArtistName Album Count ---------------------------- ----------Allan Holdsworth 2 Devin Townsend 3 Iron Maiden 5 Michael lærer at rocke 3 Tom Jones 3

Dette eksempel bruger en anden database end de foregående eksempler. Det returnerer kun de kunstnere, der har udgivet mere end 1 album. Vi kunne ændre det nummer, uanset hvor mange album vi ønsker:

BRUG musik;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artists arINNER JOIN Albums al PÅ ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 4; 

Resultat:

ArtistName Album Count------------------------- ----------Iron Maiden 5

COUNT_BIG()-funktionen

T-SQL har også en COUNT_BIG() funktion, der fungerer præcis som COUNT() , bortset fra at COUNT() returnerer en int datatype og COUNT_BIG() returnerer en bigt datatype.

Denne funktion kan være nyttig til indekserede visninger med grupperede forespørgsler. Det kan du finde ud af, hvis du prøver at oprette et indeks for en visning, der indeholder COUNT(*) , at du får en fejl som denne:

Kan ikke oprette indeks på visningen "Music.dbo.AlbumsByArtist", fordi den bruger det samlede COUNT. Brug COUNT_BIG i stedet.

I sådanne tilfælde skal du ændre visningen til at bruge COUNT_BIG(*) burde løse problemet.


  1. Hvordan virker 'in'-klausulen i oracle

  2. Krypter data i SQLite

  3. Bliv tændt af Apache Spark – Del 2

  4. Dynamiske pivotkolonner i SQL Server