Сумиране с функцията COUNT().
ПроблемИскате да изчислите броя на редовете в таблица, броя на редовете, които отговарят на определено условие, или да разберете колко пъти се среща определена стойност.
РешениеИзползвайте функцията COUNT().
ДискусияЗа да изчислите броя на редовете в цялата таблица или броя на редовете, които отговарят на условие, използвайте функцията COUNT(). Например, за да изброите съдържанието на записите в таблица, бихте издали SELECT * заявка, но за да ги преброите вместо това, издайте SELECT COUNT(*) заявка.
Ако в заявката няма клауза WHERE, всички записи на таблицата ще бъдат преброени, както в следната заявка, която показва броя на редовете в таблицата driver_log:
mysql> SELECT COUNT(*) FROM driver_log;
Ако не знаете колко щата има в САЩ, тази заявка ще ви помогне:
mysql> SELECT COUNT(*) FROM състояния;
COUNT(*) без клауза WHERE е много бърз за ISAM или MyISAM таблици.
mysql> ПОКАЗВАНЕ НА СЪСТОЯНИЕТО НА ТАБЛИЦА ОТ готварска книга КАТО 'states'\G ******************************** 1. ред *************************** Име: състояния Тип: InnoDB Формат_на_ред: Динамичен Редове: 50 Средна_дължина_на_ред: 327 Дължина_на_данни: 16384 Макс_да ta_length: NULL Index_ length: 0 Data_free: 0 Auto_increment: NULL Create_time: NULL Update_time: NULL Check_time: NULL Create_options: Коментар: InnoDB безплатно: 479232 kB
За да преброите броя на редовете, които отговарят на определени условия, посочете тези условия в клаузата WHERE. Условията могат да бъдат всякакви, благодарение на което COUNT() може да отговори на много различни въпроси:
• Колко пъти шофьорът е карал повече от 200 мили на ден?
mysql> SELECT COUNT(*) FROM driver_log WHERE мили > 200;
• Колко дникараше Сузи?
mysql> SELECT COUNT(*) FROM driver_log WHERE name = 'Suzi';
• Колко щата имаше в САЩ в началото на 20 век?
mysql> SELECT COUNT(*) FROM състояния WHERE състояние SELECT COUNT(*) FROM състояния -> КЪДЕ държавността МЕЖДУ '1800-01-01' И '1899-12-31';
Всъщност функцията COUNT() може да се използва в две форми.
Този, който използвахме по-рано (*), брои редовете. Втората форма, COUNT(expression), приема име на колона или израз като аргумент и оценява броя на не-NULL стойностите. Следната заявка показва как да се покаже както броя на редовете, така и броя на не-NULL стойности за една от нейните колони за таблица:
SELECT COUNT(*), COUNT(mycol) FROM mytbl;
Фактът, че COUNT(expression) игнорира нулеви стойности може да се използва при получаване на множество броячи за един и същи набор от данни. За да изчислите броя на пътуванията през уикенда (събота и неделя) в таблицата driver_log в една заявка, направете следното:
mysql> ИЗБЕРЕТЕ -> COUNT(IF(DAYOFWEEK(trav_date)=7,1,NULL)) AS 'съботни пътувания', -> COUNT(IF(DAYOFWEEK(trav_date)=1,1,NULL)) AS 'Пътувания в неделя' -> ОТ driver_log;
За да преброите отделно броя на пътуванията през делничните дни и през почивните дни, изпълнете следната заявка:
mysql> ИЗБЕРЕТЕ -> COUNT(IF(DAYOFWEEK(trav_date) IN (1,7),1,NULL)) AS 'уикенд пътувания', -> COUNT(IF(DAYOFWEEK(trav_date) IN (1,7),NULL,1)) AS 'пътувания през делничните дни' -> ОТ driver_log;
Операторите IF() определят дали стойността на всяка колона трябва да бъде изчислена.
Ако да, тогава изразът се оценява на 1 и COUNT() го включва в общата сума. Ако не, тогава изразът се оценява на 0 и COUNT() го игнорира. Оказва се, че броят на стойностите, които удовлетворяватусловието, посочено в първия аргумент на IF().