Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL COUNT() – Ottieni il numero di righe che devono essere restituite da una query

MySQL include un COUNT() funzione, che consente di scoprire quante righe verrebbero restituite da una query. Questa funzione fa parte dello standard SQL e può essere utilizzata con la maggior parte dei sistemi di gestione di database relazionali.

Il COUNT() La funzione può essere utilizzata anche per modificare i risultati di una query, se necessario, ad esempio restituendo solo i risultati che hanno un numero di righe maggiore di un determinato importo.

Questo articolo contiene esempi di COUNT() utilizzo in MySQL.

I dati

Innanzitutto, ecco i dati che utilizzeremo per gli esempi in questa pagina:

SELECT *
FROM Tasks;

Risultato:

+--------+-------------------+-----------------+
| TaskId | TaskName          | TaskDescription |
+--------+-------------------+-----------------+
|      1 | Do garden         | NULL            |
|      2 | Feed cats         | NULL            |
|      3 | Paint roof        | NULL            |
|      4 | Take dog for walk | NULL            |
|      5 | Relax             | NULL            |
|      6 | Feed cats         | NULL            |
+--------+-------------------+-----------------+

Conta tutte le righe in una tabella

Puoi usare COUNT() per restituire il numero totale di righe in una tabella:

SELECT COUNT(*)
FROM Tasks;

Risultato:

+----------+
| COUNT(*) |
+----------+
|        6 |
+----------+ 

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

Restringi i risultati

Quando aggiungiamo un WHERE clausola che restringe il set di risultati, otteniamo un numero più piccolo:

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

Risultato:

+----------+
| COUNT(*) |
+----------+
|        2 |
+----------+

colonna singola vs asterisco (*)

Gli esempi precedenti utilizzano tutti un asterisco per applicare il conteggio a tutte le colonne. Come per qualsiasi query, l'asterisco è facoltativo e viene utilizzato come carattere jolly per restituire tutte le colonne. Quindi, quando si utilizza COUNT() funzione, hai anche la possibilità di fornire colonne specifiche (al contrario di tutte le colonne) come argomento.

Esempio:

SELECT COUNT(TaskName)
FROM Tasks;

Risultato:

+-----------------+
| COUNT(TaskName) |
+-----------------+
|               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(TaskDescription)
FROM Tasks;

Risultato:

+------------------------+
| COUNT(TaskDescription) |
+------------------------+
|                      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 righe con diverso NULL valori.

Potresti aver notato che il TaskName la colonna ha 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:

+--------------------------+
| COUNT(DISTINCT TaskName) |
+--------------------------+
|                        5 |
+--------------------------+

Quindi, sebbene la tabella contenga sei righe, due di esse sono duplicate. Pertanto, quei due vengono contati come uno, otteniamo un risultato di cinque.

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.

Ecco un esempio che utilizza un set di dati diverso rispetto agli esempi precedenti:

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 |
+------------------------+-------------+
| Iron Maiden            |           5 |
| Devin Townsend         |           3 |
| Michael Learns to Rock |           3 |
| Tom Jones              |           3 |
| Allan Holdsworth       |           2 |
+------------------------+-------------+

Questa query restituisce solo gli artisti che hanno pubblicato più di 1 album. Ecco cosa succede quando aumentiamo il valore in HAVING clausola:

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 |
+-------------+-------------+