SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Combine SQLite Count() com GROUP BY para adicionar uma coluna “Count” ao seu conjunto de resultados


Se você precisar adicionar uma coluna “count” ao conjunto de resultados de uma consulta de banco de dados ao usar o SQLite, você pode usar o count() função para fornecer a contagem e a função GROUP BY cláusula para especificar a coluna para a qual agrupar os resultados.

Exemplo


Aqui está um exemplo rápido para demonstrar.
SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;

Resultado:
ArtistId    count(Title)
----------  ------------
1           2           
2           2           
3           1           
4           1           
5           1           
6           2           
7           1           
8           3           
9           1           
10          1           

Nesse caso, o ID de cada artista é listado no ArtistId coluna e o número de álbuns desse artista está listado na contagem(Título) coluna.

Para tornar isso um pouco mais fácil de ler, aqui está uma consulta semelhante, mas desta vez eu devolvo o nome do artista em vez do ID. Eu faço isso realizando uma junção interna com o Artista tabela.

Neste caso, eu adiciono um WHERE cláusula para retornar apenas os artistas que começam com a letra 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;

Resultado:
Name             count(al.Title)
---------------  ---------------
David Coverdale  1              
Deep Purple      11             
Def Leppard      1              
Dennis Chambers  1              
Djavan           2              
Dread Zeppelin   1              

Ordenando por contagem()


Podemos modificar isso um pouco para que o conjunto de resultados seja ordenado pela contagem. Em outras palavras, podemos ordenar para que os artistas com mais álbuns sejam listados primeiro e vice-versa.
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;

Resultado:
Name                  count(al.Title)
--------------------  ---------------
Deep Purple           11             
Djavan                2              
David Coverdale       1              
Def Leppard           1              
Dennis Chambers       1              
Dread Zeppelin        1              

Na verdade, podemos dar um passo adiante e adicionar um alias para o count() . Isso nos livrará de ter que duplicar isso no ORDER BY cláusula.
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;

Resultado:
Name                  AlbumCount
--------------------  ----------
Deep Purple           11        
Djavan                2         
David Coverdale       1         
Def Leppard           1         
Dennis Chambers       1         
Dread Zeppelin        1