Se è necessario aggiungere una colonna "count" al set di risultati di una query di database quando si utilizza SQLite, è possibile utilizzare count()
funzione per fornire il conteggio e il GROUP BY
clausola per specificare la colonna per la quale raggruppare i risultati.
Esempio
Ecco un rapido esempio da dimostrare.
SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;
Risultato:
ArtistId count(Title) ---------- ------------ 1 2 2 2 3 1 4 1 5 1 6 2 7 1 8 3 9 1 10 1
In questo caso, l'ID di ogni artista è elencato in ArtistId colonna e il numero di album per quell'artista è elencato nel count(Titolo) colonna.
Per renderlo leggermente più facile da leggere, ecco una query simile, ma questa volta restituisco il nome dell'artista anziché l'ID. Lo faccio eseguendo un inner join con l'Artista tabella.
In questo caso, aggiungo un WHERE
clausola di restituzione solo degli artisti che iniziano con la lettera D .
SELECT
ar.Name,
count(al.Title)
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name;
Risultato:
Name count(al.Title) --------------- --------------- David Coverdale 1 Deep Purple 11 Def Leppard 1 Dennis Chambers 1 Djavan 2 Dread Zeppelin 1
Ordine per Conte()
Possiamo modificarlo leggermente in modo che il set di risultati sia ordinato in base al conteggio. In altre parole, possiamo ordinarlo in modo che gli artisti con il maggior numero di album siano elencati per primi e viceversa.
SELECT
ar.Name,
count(al.Title)
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name
ORDER BY count(al.Title) DESC;
Risultato:
Name count(al.Title) -------------------- --------------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1
In realtà, possiamo fare un ulteriore passo avanti e aggiungere un alias per count()
. Questo ci solleverà dal doverlo duplicare nel ORDER BY
clausola.
SELECT
ar.Name,
count(al.Title) AS AlbumCount
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name
ORDER BY AlbumCount DESC;
Risultato:
Name AlbumCount -------------------- ---------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1