SQLite
 sql >> Database >  >> RDS >> SQLite

Combina SQLite Count() con GROUP BY per aggiungere una colonna "Count" al tuo set di risultati

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