В MariaDB, COUNT()
агрегатната функция връща броя на стойностите, различни от NULL на израза в редовете, извлечени от SELECT
изявление.
Примерни данни
Да предположим, че имаме следната таблица:
SELECT *
FROM Pets;
Резултат:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Следващите примери ще използват COUNT()
функция при запитване към тази таблица.
Пример
Ето как да преброите редовете в горната таблица:
SELECT COUNT(*)
FROM Pets;
Резултат:
8
Това ни казва, че в таблицата има 8 реда. Знаем това, защото използвахме заместващия знак за звездичка (*
), за да посочите всички редове и всички колони.
Пребройте конкретна колона
Можете също да посочите колона за броене. COUNT()
функцията отчита само не-NULL
резултати, така че ако посочите колона, която съдържа NULL
стойности, тези стойности няма да бъдат отчетени.
Ето пример, за да демонстрирам какво имам предвид.
SELECT COUNT(DOB)
FROM Pets;
Резултат:
6
В този случай Pets
таблицата съдържа две NULL
стойности в DOB
колона (два домашни любимци не са посочили датата си на раждане) и така COUNT(DOB)
връща 6 вместо 8, когато използвахме COUNT(*)
.
Причината COUNT(*)
в предишния пример върна всички редове, защото тези два реда направиха има данни в другите колони.
Филтрирани резултати
COUNT()
функцията преброява редовете, върнати от заявката. Така че, ако филтрирате резултатите, резултатът от COUNT()
ще отрази това.
SELECT COUNT(*)
FROM Pets
WHERE PetName = 'Fluffy';
Резултат:
2
В този случай има два домашни любимци с име Fluffy. Следователно, два реда биха били върнати от заявката и резултатът от COUNT()
е 2
.
Преброяване на отделни колони
Имаме опцията да добавим DISTINCT
ключова дума, за да посочите, че се връщат само различни стойности (така че изключва дубликати):
SELECT
COUNT(PetName) AS "All",
COUNT(DISTINCT PetName) AS "Distinct"
FROM Pets;
Резултат:
+-----+----------+ | All | Distinct | +-----+----------+ | 8 | 7 | +-----+----------+
В този случай, въпреки че има осем PetName
стойности, само седем от тях са различни (два са дубликати – имаме два домашни любимци, наречени Fluffy).
HAVING
Клауза
Можете да включите COUNT()
в множество части на заявка. Не се ограничава само до SELECT
списък.
Ето пример, който използва COUNT()
както в HAVING
клауза и SELECT
списък:
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;
Резултат:
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | +-------------+---------+
Вижте SQL COUNT()
за начинаещи за по-подробно обяснение на този пример, както и пример за използване на COUNT()
във функция на прозорец.