Pokud potřebujete přidat sloupec „count“ do sady výsledků databázového dotazu při použití SQLite, můžete použít count()
funkce poskytující počet a GROUP BY
klauzule k určení sloupce, pro který se mají výsledky seskupit.
Příklad
Zde je rychlý příklad k demonstraci.
SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;
Výsledek:
ArtistId count(Title) ---------- ------------ 1 2 2 2 3 1 4 1 5 1 6 2 7 1 8 3 9 1 10 1
V tomto případě je ID každého interpreta uvedeno v ArtistId a počet alb pro daného interpreta je uveden v počtu(název) sloupec.
Abychom to trochu usnadnili čtení, zde je podobný dotaz, ale tentokrát místo ID vracím jméno umělce. Dělám to pomocí vnitřního spojení s Umělcem tabulka.
V tomto případě přidám WHERE
klauzule vrátit pouze ty umělce, kteří začínají písmenem 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;
Výsledek:
Name count(al.Title) --------------- --------------- David Coverdale 1 Deep Purple 11 Def Leppard 1 Dennis Chambers 1 Djavan 2 Dread Zeppelin 1
Řazení podle Count()
Můžeme to mírně upravit tak, aby výsledná sada byla uspořádána podle počtu. Jinými slovy, můžeme to seřadit tak, aby umělci s největším počtem alb byli uvedeni jako první a naopak.
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;
Výsledek:
Name count(al.Title) -------------------- --------------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1
Ve skutečnosti můžeme jít ještě o krok dále a přidat alias pro count()
. To nás zbaví nutnosti duplikovat to v ORDER BY
doložka.
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;
Výsledek:
Name AlbumCount -------------------- ---------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1