MySQL включва COUNT()
функция, която ви позволява да разберете колко реда ще бъдат върнати от една заявка. Тази функция е част от стандарта SQL и може да се използва с повечето системи за управление на релационни бази данни.
COUNT()
Функцията може също да се използва, за да повлияе на резултатите от заявка, ако е необходимо, например, като връща само онези резултати, които имат брой редове, по-голям от дадено количество.
Тази статия съдържа примери за COUNT()
използване в MySQL.
Данните
Първо, ето данните, които ще използваме за примерите на тази страница:
ИЗБЕРЕТЕ *ОТ задачи;
Резултат:
+--------+-------------------+---------------- +| TaskId | Име на задача | Описание на задачата |+--------+-------------------+-----------------+ | 1 | Правете градина | NULL || 2 | Хранете котки | NULL || 3 | Боядисвайте покрив | NULL || 4 | Изведете кучето на разходка | NULL || 5 | Отпуснете се | NULL || 6 | Хранете котки | NULL |+--------+-------------------+----------------+
Пребройте всички редове в таблица
Можете да използвате COUNT()
за да върнете общия брой редове в таблица:
ИЗБЕРЕТЕ БРОЙ(*)ОТ задачи;
Резултат:
+---------+| БРОЙ(*) |+---------+| 6 |+---------+
Това връща броя на редовете в таблицата, защото не сме предоставили никакви критерии за стесняване на резултатите.
Стесняване на резултатите
Когато добавим WHERE
клауза, която стеснява резултантния набор, получаваме по-малко число:
ИЗБЕРЕТЕ COUNT(*) ОТ TasksWHERE TaskName КАТО '%cat%';
Резултат:
+---------+| БРОЙ(*) |+---------+| 2 |+---------+
Единична колона срещу Asterisk (*)
Всички предишни примери използват звездичка за прилагане на броя към всички колони. Както при всяка заявка, звездичката не е задължителна и се използва като заместващ знак за връщане на всички колони. Така че, когато използвате COUNT()
функция, също така имате възможност да предоставите конкретни колони (за разлика от всички колони) като аргумент.
Пример:
ИЗБЕРЕТЕ БРОЙ (име на задача) ОТ задачи;
Резултат:
+-----------------+| COUNT(Име на задача) |+----------------+| 6 |+-----------------+
Въпреки че този пример връща същия резултат, който получихме, когато използвахме звездичката, това не винаги ще е така. Например, ето какво се случва, ако посочим различна колона:
ИЗБЕРЕТЕ БРОЙ (Описание на задачата) ОТ задачи;
Резултат:
+-----------------------+| COUNT(Описание на задачата) |+-----------------------+| 0 |+------------------------+
В този случай получаваме нула, защото тази конкретна колона съдържа нулеви стойности във всеки ред.
Пример – Различен
Можете да добавите DISTINCT
аргумент за връщане само на броя на редовете с различни не-NULL
стойности.
Може да сте забелязали, че TaskName
колоната има дублирана стойност („Feed cats“ се появява два пъти). Това може да доведе до проблеми, ако не искате дубликатите да се броят.
Ето как изглежда, ако приложим DISTINCT
аргумент към TaskName
колона:
ИЗБЕРЕТЕ БРОЙ(DISTINCT TaskName)ОТ задачи;
Резултат:
+-------------------------+| COUNT(DISTINCT TaskName) |+--------------------------+| 5 |+-------------------------+
Така че, въпреки че таблицата съдържа шест реда, два от тях са дублирани. Следователно тези две се броят като едно, получаваме резултат пет.
Пример – Клауза HAVING
Можете също да използвате COUNT()
с HAVING
клауза за ограничаване на набор от резултати въз основа на броя на редовете, които ще бъдат върнати.
Ето пример, използващ различен набор от данни от предишните примери:
ИЗПОЛЗВАЙТЕ музика;ИЗБЕРЕТЕ ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Изпълнители arINNER JOIN Албуми al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1; предварително>Резултат:
+-----------------------+------------+| Име на изпълнител | Брой албуми |+-----------------------+------------+| Iron Maiden | 5 || Девин Таунсенд | 3 || Майкъл се научава да рок | 3 || Том Джоунс | 3 || Алън Холдсуърт | 2 |+-----------------------+------------+Тази заявка връща само онези изпълнители, които са издали повече от 1 албум. Ето какво се случва, когато увеличим стойността в
HAVING
клауза:ИЗПОЛЗВАЙТЕ музика;ИЗБЕРЕТЕ ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Изпълнители arINNER JOIN Албуми al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 4; предварително>Резултат:
+------------+------------+| Име на изпълнител | Брой албуми |+-------------+------------+| Iron Maiden | 5 |+------------+------------+