sql >> Databasteknik >  >> RDS >> SQLite

Kombinera SQLite Count() med GROUP BY för att lägga till en "Count"-kolumn till din resultatuppsättning

Om du behöver lägga till en "count"-kolumn till resultatuppsättningen av en databasfråga när du använder SQLite, kan du använda count() funktion för att tillhandahålla räkningen och GROUP BY sats för att specificera kolumnen som resultaten ska grupperas för.

Exempel

Här är ett snabbt exempel att visa.

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

Resultat:

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

I det här fallet visas varje artists ID i ArtistId kolumnen och antalet album för den artisten listas i count(Title) kolumn.

För att göra detta lite lättare att läsa, här är en liknande fråga, men den här gången returnerar jag artistens namn istället för ID. Jag gör detta genom att utföra en inre koppling med konstnären bord.

I det här fallet lägger jag till en WHERE klausul för att endast returnera de artister som börjar med bokstaven 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;

Resultat:

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

Beställning efter Count()

Vi kan modifiera detta något så att resultatuppsättningen ordnas efter antalet. Med andra ord kan vi ordna det så att de artister som har flest album listas först och 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;

Resultat:

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

Egentligen kan vi gå ett steg längre och lägga till ett alias för count() . Detta kommer att befria oss från att behöva duplicera det i ORDER BY klausul.

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;

Resultat:

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

  1. Hur man formaterar siffror med kommatecken i MySQL

  2. VÄNSTER JOIN endast första raden

  3. Infoga blob i Oracle-databasen med C#

  4. Hur delar jag upp utdata från mysqldump i mindre filer?