SQLite count()
функцията може да се използва за връщане на броя на редовете в резултатен набор.
Може да се използва и за връщане на колко пъти дадена колона не е NULL в резултатния набор.
Може да се използва по два начина. Ако подадете звездичката (*
) заместващ знак, той ще върне общия брой редове в групата. Ако предоставите името на колона, тя ще върне колко пъти тази колона не е NULL.
Синтаксис
Синтаксисът е така:
count(X)
count(*)
Така че в този случай X
може да бъде името на колона и звездичката (*
) се използва заместващ знак за определяне на общия брой редове в групата.
Пример:count(*)
Ето основен пример за демонстриране на синтаксиса на звездичка (*) за връщане на броя на редовете в таблица.
SELECT count(*) FROM Customer;
Резултат:
59
Изпълних тази заявка в примерната база данни на Chinook и така се оказа, че има 59 реда в Клиент таблица.
Пример:брой(X)
В този пример предавам името на конкретна колона на таблицата.
SELECT count(Fax) FROM Customer;
Резултат:
12
В този случай Факсът колоната има 12 стойности, различни от NULL.
С други думи, 47 реда съдържат стойност NULL в Факса колона.
Използване на клауза WHERE
Резултатът от count()
се изчислява след всяко WHERE
клаузи.
SELECT count(Fax)
FROM Customer
WHERE CustomerId <= 5;
Резултат:
2
В този случай в Факса имаше само две стойности, различни от NULL колона в резултатния набор.
Ето как изглеждат резултатите с върнати колони (и без използване на count()
функция).
SELECT CustomerId, Fax
FROM Customer
WHERE CustomerId <= 5;
Резултат:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Така че можем да видим, че само редове 1 и 5 имат стойности, различни от NULL в Факса колона.
Използване на клауза LIMIT
Резултатът не се изчислява след LIMIT
клауза.
SELECT count(Fax)
FROM Customer
LIMIT 5;
Резултат:
12
Но вместо това можете да направите нещо подобно:
SELECT count(Fax)
FROM (SELECT Fax FROM Customer
LIMIT 5);
Резултат:
2
Групирани резултати
Един удобен случай за използване на count()
е да го използвате във връзка с GROUP BY
клауза, така че да се връщат множество редове – всеки от които представлява група – с броя на редовете в тази група.
Ето един пример.
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
LIMIT 10;
Резултат:
Name count(al.Title) --------------- --------------- David Coverdale 1 Deep Purple 11 Def Leppard 1 Dennis Chambers 1 Djavan 2 Dread Zeppelin 1
Ключовата дума DISTINCT
Можете да добавите DISTINCT
ключова дума, за да брои само различни стойности. С други думи, можете да премахнете дублиращи се стойности в изчислението.
За примери за това вижте Как да премахнете дубликати от SQLite Count() Results.