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

Come restituire il numero di righe in un risultato di query in SQL Server

Quando si lavora con i database, a volte si desidera scoprire quante righe verranno restituite da una query, senza restituire effettivamente i risultati della query. O a volte potresti semplicemente voler scoprire quante righe ci sono in una determinata tabella.

In SQL Server puoi utilizzare COUNT() di T-SQL funzione per restituire il numero di righe che verrebbero restituite in una query.

I dati

Ecco i dati che utilizzeremo negli esempi in questa pagina:

SELECT *
FROM Tasks;

Risultato:

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    

Esempio:conta tutte le righe in una tabella

Ecco un esempio di utilizzo di COUNT() funzione per restituire il numero totale di righe in una tabella:

SELECT COUNT(*)
FROM Tasks;

Risultato:

6  

Questo restituisce il numero di righe nella tabella perché non abbiamo fornito alcun criterio per restringere i risultati.

Esempio:aggiunta di criteri

Ecco un esempio di conteggio di quante righe verrebbero restituite in base a un determinato criterio:

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

Risultato:

3

Esempio:specifica una singola colonna

Gli esempi precedenti utilizzano tutti un asterisco per applicare il conteggio a tutte le colonne. Hai anche la possibilità di specificare una colonna specifica.

Esempio:

SELECT COUNT(TaskName)
FROM Tasks;

Risultato:

6

Sebbene questo esempio restituisca lo stesso risultato che abbiamo ottenuto quando abbiamo utilizzato l'asterisco, non sarà necessariamente così. Ad esempio, ecco cosa succede se specifichiamo una colonna diversa:

SELECT COUNT(TaskCode)
FROM Tasks;

Risultato:

0

In questo caso otteniamo zero, perché quella particolare colonna contiene valori nulli in ogni riga.

Esempio – Distinto

Puoi aggiungere il DISTINCT argomento per restituire solo il numero di valori univoci (non nulli).

Potresti aver notato che ogni riga nella nostra TaskDescription la colonna contiene lo stesso valore ("TBA"). E il TaskName la colonna ha anche un valore duplicato ("Feed cats" appare due volte). Ciò potrebbe causare problemi se non desideri che i duplicati vengano conteggiati.

Ecco come appare se applichiamo il DISTINCT argomento al TaskName colonna:

SELECT COUNT(DISTINCT TaskName)
FROM Tasks;

Risultato:

5

E qui viene applicato contro TaskDescription tabella (dove tutti i valori sono identici):

SELECT COUNT(DISTINCT TaskDescription)
FROM Tasks;

Risultato:

1

Esempio:la clausola HAVING

Puoi anche usare COUNT() con il HAVING clausola per limitare un set di risultati in base al numero di righe che verrebbero restituite.

Esempio:

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;

Risultato:

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

Questo esempio utilizza un database diverso rispetto agli esempi precedenti. Restituisce solo quegli artisti che hanno pubblicato più di 1 album. Potremmo cambiare quel numero quanti album desideriamo:

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;

Risultato:

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

La funzione COUNT_BIG()

T-SQL ha anche un COUNT_BIG() funzione che funziona esattamente come COUNT() , tranne che COUNT() restituisce un int tipo di dati e COUNT_BIG() restituisce un bigint tipo di dati.

Questa funzione può essere utile per viste indicizzate con query raggruppate. Potresti trovare se provi a creare un indice per una vista che contiene COUNT(*) , che ricevi un errore come questo:

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

In questi casi, alterare la visualizzazione per utilizzare COUNT_BIG(*) dovrebbe risolvere il problema.