SQL — Урок 8. Группировка записей и функция COUNT()
Давайте вспомним, какие сообщения и в каких темах у нас имеются. Для этого можно воспользоваться привычным запросом:
А что, если нам надо лишь узнать сколько сообщений на форуме имеется. Для этого можно воспользоваться встроенной функцией COUNT(). Эта функция подсчитывает число строк. Причем, если в качестве аргумента этой функции выступает *, то подсчитываются все строки таблицы. А если в качестве аргумента указывается имя столбца, то подсчитываются только те строки, которые имеют значение в указанном столбце.
В нашем примере оба аргумента дадут одинаковый результат, т.к. все столбцы таблицы имеют тип NOT NULL. Давайте напишем запрос, используя в качестве аргумента столбец id_topic:
SELECT COUNT(id_topic) FROM posts;
Итак, в наших темах имеется 4 сообщения. Но что, если мы хотим узнать сколько сообщений имеется в каждой теме. Для этого нам понадобится сгруппировать наши сообщения по темам и вычислить для каждой группы количество сообщений. Для группировки в SQL используется оператор GROUP BY. Наш запрос теперь будет выглядеть так:
SELECT id_topic, COUNT(id_topic) FROM posts GROUP BY id_topic;
Оператор GROUP BY указывает СУБД сгруппировать данные по столбцу id_topic (т.е. каждая тема — отдельная группа) и для каждой группы подсчитать количество строк:
Ну вот, в теме с у нас 3 сообщения, а с — одно. Кстати, если бы в поле id_topic были возможны отсутствия значений, то такие строки были бы объединены в отдельную группу со значением NULL.
Предположим, что нас интересуют только те группы, в которых больше двух сообщений. В обычном запросе мы указали бы условие с помощью оператора WHERE, но этот оператор умеет работать только со строками, а для групп те же функции выполняет оператор HAVING:
SELECT id_topic, COUNT(id_topic) FROM posts GROUP BY id_topic HAVING COUNT(id_topic) > 2;
В результате имеем:
В уроке 4 мы рассматривали, какие условия можно задавать оператором WHERE, те же условия можно задавать и оператором HAVING, только надо запомнить, что WHERE фильтрует строки, а HAVING — группы.
Итак, сегодня мы узнали, как создавать группы и как подсчитать количество строк в таблице и в группах. Вообще вместе с оператором GROUP BY можно использовать и другие встроенные функции, но их мы будем изучать позже.
Онлайн-курс. Освойте востребованную профессию с зарплатой от 70 000 руб в месяц!
Теперь нажмите кнопку, что бы не забыть адрес и вернуться к нам снова.
admin@site-do.ru
site-do.ru © 2009-2019 Копировать материалы сайта запрещено!
За нарушение авторских прав предусмотрена уголовная ответственность!
Телефон редакции +7(499)346-89-56
127051, г.Москва, Цветной бульвар, д. 11, стр. 6, офис 405.
Как посчитать количество записей в таблице sql
Функция COUNT подсчитывает количество записей в таблице.
SELECT COUNT(*) FROM имя_таблицы WHERE условие;
WHERE — необязательная часть запроса, если не указать условие, будут подсчитаны все записи в таблице.
Посчитать проценты в MySQL
Есть таблица со списком посетителей с указанием стран, откуда они пришли. Нужно вывести кол-во посетителей по каждой из стран (численно и в процентах). Можно ли сделать это одним запросом?
SELECT COUNT(*) AS `count`, `count` / общее_кол-во_строк * 100 AS `percent` FROM `visitors` GROUP BY `country`
Аватар
Примерно в этом направлении
SELECT country,COUNT(*) AS CountRec,COUNT(*)/(SELECT COUNT(*) FROM visitors)*100 AS percent FROM visitors GROUP BY country
Похожие статьи
- Просмотреть базу данных mysql
- MySQL запрос. Проблема в выборе по максимальной дате
- Замена текста в базе данных по условию
- MySQL запрос. Проблема в выборе по максимальной дате
- Выборка максимальных значений из каждой группы (GROUP BY)
- Как в dbgrid сгруппировать повторяющиеся строки в таблице
- Обработка ошибки потери соединения с mysql
- Вывести данные в таблицу с фиксированным размером столбцов
- Выборка данных по возрасту
- Создать запрос который выводил бы список студентов, тех у кого хотя бы одна «3»
Функция COUNT
Функция COUNT подсчитывает количество записей в таблице. Условие, по которому будут выбираться записи, задается с помощью команды WHERE . Команда WHERE не является обязательной, если ее не указать - будут подсчитаны все записи в таблице.
Синтаксис
Подсчет всех записей:
SELECT COUNT(*) FROM имя_таблицы WHERE условие
Подсчет всех записей, где заданное поле не равно NULL:
SELECT COUNT(поле) FROM имя_таблицы WHERE условие
Только уникальные значения поля:
SELECT COUNT(DISTINCT поле) FROM имя_таблицы WHERE условие
Таблицы для примеров
таблица employees
id
айди
name
имя
age
возраст
salary
зарплата
1
user1
23
400
2
user2
25
500
3
user3
23
500
4
user4
30
900
5
user5
27
500
6
user6
28
900
Пример
Давайте подсчитаем в таблице всех работников с возрастом 23 года:
SELECT COUNT(*) as count FROM employees WHERE age=23
Результат выполнения SQL запроса:
count
результат подсчета
2
Пример
Давайте подсчитаем в таблице количество разных зарплат (их будет 3 штуки: 400 , 500 и 1000):
SELECT COUNT(DISTINCT salary) as count FROM employees
Результат выполнения SQL запроса:
count
результат подсчета
3
Пример
Давайте подсчитаем в таблице одновременно количество разных возрастов и количество разных зарплат:
SELECT COUNT(DISTINCT age) as count1, COUNT(DISTINCT salary) as count2 FROM employees
Результат выполнения SQL запроса:
count1
количество возрастов
count2
количество зарплат
5
3
Меняем таблицу для примеров
таблица employees
id
айди
name
имя
age
возраст
salary
зарплата
1
user1
23
NULL
2
user2
25
500
3
user3
23
NULL
Пример
Давайте подсчитаем количество всех записей:
SELECT COUNT(*) as count FROM employees
Результат выполнения SQL запроса:
count
результат подсчета
3
А теперь подсчитаем количество зарплат, не равных NULL:
SELECT COUNT(salary) as count FROM employees
Результат выполнения SQL запроса:
count
результат подсчета
1
Смотрите также
- команду DISTINCT ,
которая позволяет подсчитывать только уникальные значения поля
- команду GROUP BY,
которая позволяет группировать записи
