sql >> Database >  >> RDS >> Sqlserver

Hoe het aantal rijen in een queryresultaat in SQL Server te retourneren

Wanneer u met databases werkt, wilt u soms weten hoeveel rijen er door een query worden geretourneerd, zonder de resultaten van de query daadwerkelijk te retourneren. Of soms wil je gewoon weten hoeveel rijen er in een bepaalde tabel zitten.

In SQL Server kunt u T-SQL's COUNT() . gebruiken functie om het aantal rijen terug te geven dat in een zoekopdracht zou worden geretourneerd.

De gegevens

Dit zijn de gegevens die we zullen gebruiken in de voorbeelden op deze pagina:

SELECT *
FROM Tasks;

Resultaat:

TaskId  TaskName      TaskDescription  TaskCode
------  ------------  ---------------  --------
1       Feed cats     TBA              null    
2       Water dog     TBA              null    
3       Feed garden   TBA              null    
4       Paint carpet  TBA              null    
5       Clean roof    TBA              null    
6       Feed cats     TBA              null    

Voorbeeld – Tel alle rijen in een tabel

Hier is een voorbeeld van het gebruik van de COUNT() functie om het totale aantal rijen in een tabel te retourneren:

SELECT COUNT(*)
FROM Tasks;

Resultaat:

6  

Dit retourneert het aantal rijen in de tabel omdat we geen criteria hebben opgegeven om de resultaten te verfijnen.

Voorbeeld – Criteria toevoegen

Hier is een voorbeeld van het tellen hoeveel rijen zouden worden geretourneerd op basis van een bepaald criterium:

SELECT COUNT(*)
FROM Tasks
WHERE TaskName LIKE '%dog%' 
OR TaskName LIKE '%cat%';

Resultaat:

3

Voorbeeld – Specificeer een enkele kolom

De vorige voorbeelden gebruiken allemaal een asterisk om de telling op alle kolommen toe te passen. Je hebt ook de mogelijkheid om een ​​specifieke kolom op te geven.

Voorbeeld:

SELECT COUNT(TaskName)
FROM Tasks;

Resultaat:

6

Hoewel dit voorbeeld hetzelfde resultaat oplevert dat we kregen toen we de asterisk gebruikten, is dat niet altijd het geval. Dit is bijvoorbeeld wat er gebeurt als we een andere kolom specificeren:

SELECT COUNT(TaskCode)
FROM Tasks;

Resultaat:

0

In dit geval krijgen we nul, omdat die bepaalde kolom null-waarden bevat in elke rij.

Voorbeeld – Duidelijk

U kunt de DISTINCT . toevoegen argument om alleen het aantal unieke (niet-null) waarden te retourneren.

Het is je misschien opgevallen dat elke rij in onze TaskDescription kolom dezelfde waarde (“TBA”) bevat. En de TaskName kolom heeft ook een dubbele waarde (“Feed cats” verschijnt twee keer). Dit kan problemen veroorzaken als u niet wilt dat duplicaten worden geteld.

Zo ziet het eruit als we de DISTINCT . toepassen argument aan de TaskName kolom:

SELECT COUNT(DISTINCT TaskName)
FROM Tasks;

Resultaat:

5

En hier wordt het toegepast tegen de TaskDescription tabel (waar alle waarden identiek zijn):

SELECT COUNT(DISTINCT TaskDescription)
FROM Tasks;

Resultaat:

1

Voorbeeld – De HAVING-clausule

U kunt ook COUNT() . gebruiken met de HAVING clausule om een ​​resultaatset te beperken op basis van het aantal rijen dat zou worden geretourneerd.

Voorbeeld:

USE Music;
SELECT ar.ArtistName,   
       COUNT(al.AlbumName) 'Album Count'
FROM Artists ar
INNER JOIN Albums al 
ON ar.ArtistId = al.ArtistId
GROUP BY ar.ArtistName
HAVING COUNT(al.AlbumName) > 1;

Resultaat:

ArtistName                 Album Count
-------------------------  -----------
Allan Holdsworth           2          
Devin Townsend             3          
Iron Maiden                5          
Michael Learns to Rock     3          
Tom Jones                  3

Dit voorbeeld gebruikt een andere database dan de vorige voorbeelden. Het geeft alleen artiesten terug die meer dan 1 album hebben uitgebracht. We kunnen dat aantal veranderen, hoeveel albums we ook willen:

USE Music;
SELECT ar.ArtistName,   
       COUNT(al.AlbumName) 'Album Count'
FROM Artists ar
INNER JOIN Albums al 
ON ar.ArtistId = al.ArtistId
GROUP BY ar.ArtistName
HAVING COUNT(al.AlbumName) > 4;

Resultaat:

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

De COUNT_BIG() Functie

T-SQL heeft ook een COUNT_BIG() functie die precies werkt als COUNT() , behalve dat COUNT() retourneert een int gegevenstype en COUNT_BIG() retourneert een grote gegevenstype.

Deze functie kan handig zijn voor geïndexeerde views met gegroepeerde queries. Mogelijk vindt u dit als u een index probeert te maken voor een weergave die COUNT(*) . bevat , dat u een foutmelding als deze krijgt:

Cannot create index on view "Music.dbo.AlbumsByArtist" because it uses the aggregate COUNT. Use COUNT_BIG instead.

In dergelijke gevallen, de weergave wijzigen om COUNT_BIG(*) te gebruiken zou het probleem moeten oplossen.


  1. PLSQL JDBC:Hoe krijg ik de laatste rij-ID?

  2. Eenvoudige manier om kolommen en rijen in SQL te transponeren?

  3. Laravel:Opgegeven sleutel was te lang; maximale sleutellengte is 767 bytes

  4. PostgreSQL - GROUP BY-clausule