In MariaDB, il COUNT()
la funzione di aggregazione restituisce un conteggio del numero di valori non NULL di un'espressione nelle righe recuperate da un SELECT
dichiarazione.
Dati di esempio
Supponiamo di avere la seguente tabella:
SELECT *
FROM Pets;
Risultato:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Gli esempi seguenti utilizzeranno COUNT()
funzione quando si interroga questa tabella.
Esempio
Ecco come contare le righe nella tabella sopra:
SELECT COUNT(*)
FROM Pets;
Risultato:
8
Questo ci dice che ci sono 8 righe nella tabella. Lo sappiamo perché abbiamo utilizzato il carattere jolly asterisco (*
) per specificare tutte le righe e tutte le colonne.
Conta una colonna specifica
Puoi anche specificare una colonna da contare. Il COUNT()
la funzione conta solo non NULL
risultati, quindi se specifichi una colonna che contiene NULL
valori, quei valori non verranno conteggiati.
Ecco un esempio per dimostrare cosa intendo.
SELECT COUNT(DOB)
FROM Pets;
Risultato:
6
In questo caso, il Pets
la tabella contiene due NULL
valori nel DOB
colonna (due animali domestici non hanno fornito la loro data di nascita), e quindi COUNT(DOB)
restituisce 6, invece di 8 quando abbiamo usato COUNT(*)
.
Il motivo COUNT(*)
nell'esempio precedente hanno restituito tutte le righe, perché quelle due righe hanno fatto avere dati nelle altre colonne.
Risultati filtrati
Il COUNT()
la funzione conta le righe restituite dalla query. Quindi, se filtri i risultati, il risultato di COUNT()
lo rifletterà.
SELECT COUNT(*)
FROM Pets
WHERE PetName = 'Fluffy';
Risultato:
2
In questo caso, ci sono due animali domestici con il nome di Fluffy. Pertanto, la query avrebbe restituito due righe e il risultato di COUNT()
è 2
.
Conta colonne distinte
Abbiamo la possibilità di aggiungere il DISTINCT
parola chiave per specificare che vengono restituiti solo valori distinti (in modo da escludere i duplicati):
SELECT
COUNT(PetName) AS "All",
COUNT(DISTINCT PetName) AS "Distinct"
FROM Pets;
Risultato:
+-----+----------+ | All | Distinct | +-----+----------+ | 8 | 7 | +-----+----------+
In questo caso, anche se ci sono otto PetName
valori, solo sette di loro sono distinti (due sono duplicati:abbiamo due animali domestici chiamati Fluffy).
Il HAVING
Clausola
Puoi includere COUNT()
in più parti di una query. Non è solo limitato a SELECT
elenco.
Ecco un esempio che utilizza COUNT()
in entrambi i HAVING
clausola e il SELECT
elenco:
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;
Risultato:
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | +-------------+---------+
Vedi SQL COUNT()
per principianti per una spiegazione più dettagliata di questo esempio, nonché un esempio di utilizzo di COUNT()
in una funzione finestra.