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