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