sql >> Database >  >> RDS >> SQLite

Combineer SQLite Count() met GROUP BY om een ​​"Count"-kolom aan uw resultatenset toe te voegen

Als u een "count"-kolom moet toevoegen aan de resultatenset van een databasequery wanneer u SQLite gebruikt, kunt u de count() gebruiken functie om de telling te geven, en de GROUP BY om de kolom op te geven waarvoor de resultaten moeten worden gegroepeerd.

Voorbeeld

Hier is een snel voorbeeld om te demonstreren.

SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;

Resultaat:

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

In dit geval wordt de ID van elke artiest vermeld in de ArtistId kolom, en het aantal albums voor die artiest wordt vermeld in de count(Title) kolom.

Om dit iets gemakkelijker te lezen te maken, is hier een vergelijkbare vraag, maar deze keer geef ik de naam van de artiest terug in plaats van de ID. Dit doe ik door een inner join uit te voeren met de Artiest tafel.

In dit geval voeg ik een WHERE . toe clausule om alleen die artiesten terug te geven die beginnen met de letter 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;

Resultaat:

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

Bestellen op aantal()

We kunnen dit enigszins wijzigen, zodat de resultatenset wordt geordend op basis van de telling. Met andere woorden, we kunnen het zo bestellen dat de artiesten met de meeste albums als eerste worden vermeld en omgekeerd.

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;

Resultaat:

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

Eigenlijk kunnen we nog een stap verder gaan en een alias toevoegen voor de count() . Dit zal ons verlossen van het dupliceren van dat in de ORDER BY clausule.

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;

Resultaat:

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

  1. SQL-query om dubbele waarden samen te vouwen op datumbereik

  2. Hoe alle controlebeperkingen in SQL Server-database uit te schakelen - SQL Server / TSQL-zelfstudie, deel 87

  3. MySQL-TEKST versus BLOB versus CLOB

  4. mySQL-subquerylimiet