SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Połącz SQLite Count() z GROUP BY, aby dodać kolumnę „Count” do zestawu wyników

Jeśli potrzebujesz dodać kolumnę „count” do zestawu wyników zapytania bazy danych podczas korzystania z SQLite, możesz użyć count() funkcja zapewniająca licznik i GROUP BY klauzulę określającą kolumnę, dla której grupowane są wyniki.

Przykład

Oto krótki przykład do zademonstrowania.

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

Wynik:

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

W takim przypadku identyfikator każdego wykonawcy jest wymieniony w Identyfikatorze wykonawcy kolumna, a liczba albumów tego wykonawcy jest wymieniona w liczbie(tytuł) kolumna.

Aby nieco ułatwić czytanie, podaję podobne zapytanie, ale tym razem zamiast identyfikatora zwracam nazwisko artysty. Robię to, wykonując wewnętrzne połączenie z Artystą tabela.

W tym przypadku dodaję WHERE klauzula o zwrocie tylko tych artystów, których nazwa zaczyna się na literę 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;

Wynik:

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

Kolejność według Count()

Możemy to nieco zmodyfikować, aby zestaw wyników był uporządkowany według liczby. Innymi słowy, możemy to uporządkować tak, aby ci artyści z największą liczbą albumów byli wymienieni jako pierwsi i na odwrót.

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;

Wynik:

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

Właściwie możemy pójść o krok dalej i dodać alias dla count() . To uwolni nas od konieczności powielania tego w ORDER BY klauzula.

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;

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd SQLiteConstraintException wyświetlany po rozpoczęciu każdej aktywności

  2. Jak uzyskać wczorajszą datę w SQLite?

  3. Automatycznie otwieraj wyniki zapytania SQLite w edytorze tekstu

  4. SQLite wybierz wiersze, jeśli znacznik czasu pasuje do dzisiejszej daty

  5. SQLite - Nie można otworzyć pliku bazy danych