Ако трябва да добавите колона "count" към резултантния набор от заявка за база данни, когато използвате SQLite, можете да използвате count()
функция за предоставяне на броя и GROUP BY
клауза, за да посочите колоната, за която да групирате резултатите.
Пример
Ето един бърз пример за демонстрация.
SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;
Резултат:
ArtistId count(Title) ---------- ------------ 1 2 2 2 3 1 4 1 5 1 6 2 7 1 8 3 9 1 10 1
В този случай идентификаторът на всеки изпълнител е посочен в ArtistId колона, а броят на албумите за този изпълнител е посочен в count(Title) колона.
За да направим това малко по-лесно за четене, ето подобна заявка, но този път връщам името на художника вместо ID. Правя това, като извършвам вътрешно свързване с Изпълнителя таблица.
В този случай добавям WHERE
клауза за връщане само на онези изпълнители, които започват с буквата 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;
Резултат:
Name count(al.Title) --------------- --------------- David Coverdale 1 Deep Purple 11 Def Leppard 1 Dennis Chambers 1 Djavan 2 Dread Zeppelin 1
Подреждане по Count()
Можем леко да променим това, така че наборът от резултати да бъде подреден по броя. С други думи, можем да го поръчаме така, че изпълнителите с най-много албуми да бъдат изброени първи и обратно.
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;
Резултат:
Name count(al.Title) -------------------- --------------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1
Всъщност можем да отидем още по-далеч и да добавим псевдоним за count()
. Това ще ни освободи от необходимостта да дублираме това в ORDER BY
клауза.
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;
Резултат:
Name AlbumCount -------------------- ---------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1