Підсумовування за допомогою функції COUNT()

ЗавданняВи хочете обчислити кількість рядків таблиці, кількість рядків, що задовольняють деякі умови, або дізнатися, скільки разів зустрічається певне значення.

РішенняВикористовуйте функцію COUNT().

ОбговоренняЩоб обчислити кількість рядків у всій таблиці або кількість рядків, які відповідають умові, використовуйте функцію COUNT(). Наприклад, щоб вивести вміст записів таблиці, ви виконуєте запит SELECT *, а щоб замість цього порахувати їх кількість, створіть запит SELECT COUNT(*).

Якщо у запиті немає інструкції WHERE, то будуть зраховані всі записи таблиці, як у наступному запиті, що виводить кількість рядків таблиці driver_log:

mysql> SELECT COUNT(*) FROM driver_log;

Якщо ви не знаєте, скільки штатів у США, вам допоможе такий запит:

mysql> SELECT COUNT(*) FROM states;

COUNT(*) без інструкції WHERE дуже швидко виконується для таблиць ISAM чи MyISAM.

mysql> SHOW TABLE STATUS FROM cookbook LIKE 'states'\G *************************** 1. row ****** ********************* Name: states Type: InnoDB Row_format: Dynamic Rows: 50 Avg_row_length: 327 Data_length: 16384 Max_data_length: NULL Index_length: 0 Data_free: 0 Auto_increment: NULL Create_time: NULL Update_time: NULL Check_time 3>Create_options: Comment: InnoDB free: 479232 kB

Щоб порахувати кількість рядків, які відповідають деяким умовам, вкажіть ці умови в інструкції WHERE. Умови можуть бути будь-якими, завдяки чому COUNT() вміє відповідати на безліч різних питань:

• Скільки разів водій проїжджав понад 200 миль на день?

mysql> SELECT COUNT(*) FROM driver_log WHERE miles > 200;

• Скільки днівбула за кермом Suzi?

mysql> SELECT COUNT(*) FROM driver_log WHERE name = 'Suzi';

• Скільки штатів входило до США на початку ХХ століття?

mysql> SELECT COUNT(*) FROM states WHERE statehood SELECT COUNT(*) FROM states -> WHERE statehood BETWEEN '1800-01-01' AND '1899-12-31';

Насправді функцію COUNT() можна використовувати у двох формах.

Використана нами раніше (*) вважає рядки. Друга форма, COUNT(вираз), приймає як аргумент ім'я стовпця чи вираз і обчислює кількість значень не-NULL. Наступний запит показує, як вивести для таблиці та лічильник рядків, та кількість значень не-NULL одного з її стовпців:

SELECT COUNT(*), COUNT(mycol) FROM mytbl;

Той факт, що COUNT (вираз) не враховує значення NULL, можна використовувати при отриманні кількох лічильників одного набору даних. Щоб в одному запиті обчислити кількість поїздок у вихідні дні (суботу та неділю) у таблиці driver_log, зробіть таке:

mysql> SELECT -> COUNT(IF(DAYOFWEEK(trav_date)=7,1,NULL)) AS 'Saturday trips', -> COUNT(IF(DAYOFWEEK(trav_date)=1,1,NULL)) AS 'Sunday trips' -> FROM driver_log;

Щоб окремо порахувати кількість поїздок у робочі та вихідні дні, виконайте такий запит:

mysql> SELECT -> COUNT(IF(DAYOFWEEK(trav_date) IN (1,7),1,NULL)) AS 'weekend trips', -> COUNT(IF(DAYOFWEEK(trav_date) IN (1,7),NULL,1)) AS 'weekday trips' -> FROM driver_log;

Вирази IF() визначають, чи має бути пораховано значення кожного стовпця.

Якщо так, то вираз оцінюється в 1, і COUNT() включає його в підсумку. Якщо ж ні, то вираз оцінюється в 0 і COUNT() його ігнорує. Виходить, що обчислюється кількість значень, що задовольняютьумові, заданій у першому аргументі IF().