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

Kombiner SQLite Count() med GROUP BY for at tilføje en "Count"-kolonne til dit resultatsæt

Hvis du har brug for at tilføje en "count"-kolonne til resultatsættet af en databaseforespørgsel, når du bruger SQLite, kan du bruge count() funktion til at angive antallet og GROUP BY klausul for at angive den kolonne, som resultaterne skal grupperes for.

Eksempel

Her er et hurtigt eksempel at demonstrere.

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 dette tilfælde er hver kunstners ID angivet i ArtistId kolonnen, og antallet af albums for den kunstner er angivet i tæller(Titel) kolonne.

For at gøre dette lidt lettere at læse, er her en lignende forespørgsel, men denne gang returnerer jeg kunstnerens navn i stedet for ID'et. Det gør jeg ved at udføre en indre joinforbindelse med kunstneren tabel.

I dette tilfælde tilføjer jeg en WHERE klausul for kun at returnere de kunstnere, der starter med bogstavet 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              

Bestilling efter Count()

Vi kan ændre dette lidt, så resultatsættet er sorteret efter antallet. Med andre ord kan vi ordne det, så de kunstnere med flest albums vises først, og omvendt.

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              

Faktisk kan vi gå et skridt videre og tilføje et alias for count() . Dette vil fritage os fra at skulle duplikere 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. Almindelige MySql-interviewspørgsmål og svar for friskere og erfarne

  2. FEJL:tilladelse nægtet til relationstabelnavn på Postgres, mens du prøvede en SELECT som skrivebeskyttet bruger

  3. Tidligere Capgemini Executive, Sunitha Ray, slutter sig til ScaleGrid DBaaS for at udvide virksomhedens salg

  4. Sådan opretter du en tabel i designvisning i Access 2016