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. Количество записей в связанной таблице
Очень простой для многих вопрос: Есть таблица category ( id , name )
И связанная таблица неких сущностей entity ( id , category_id , name ) Необходимо вытащить все категории и количество сущностей в каждой. Написал
select * from category left join entity on category.id = entity.id
А дальше тупик.
Отслеживать
задан 7 фев 2018 в 14:11
1,398 10 10 серебряных знаков 20 20 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
select c.*, count(e.id) from category c left join entity e on c.id = e.category_id group by c.id;
Отслеживать
ответ дан 7 фев 2018 в 14:14
Sergey Gornostaev Sergey Gornostaev
66.3k 6 6 золотых знаков 51 51 серебряный знак 112 112 бронзовых знаков
ОШИБКА: столбец «c.name» должен фигурировать в предложении GROUP BY или использоваться в агрегатной функции
7 фев 2018 в 14:23
Можно обойти, чтоб все поля не перечислять? Их там много на самом деле
Как посчитать количество записей в таблице sql
Функция COUNT подсчитывает количество записей в таблице.
SELECT COUNT(*) FROM имя_таблицы WHERE условие;
WHERE — необязательная часть запроса, если не указать условие, будут подсчитаны все записи в таблице.
Сколько записей в базе данных данной структуры. Как узнать
Представим, что наша база данных содержит некую таблицу, где мы ведем учет своих клиентов. Итак, наша таблица «customers» выглядит следующим образом:
Идентификатор, ID |
Customers_name |
Customers_age |
Customers_purchase |
1 |
Дмитрий Федорович |
24 |
4000 |
2 |
Петр Алексеевич |
26 |
5000 |
3 |
Василий Алибабаевич |
24 |
5000 |
4 |
Николай Павлович |
31 |
10000 |
5 |
Иван Николаевич |
28 |
5000 |
6 |
Кирилл Мефодиевич |
29 |
10000 |
Естественно, строк и столбцов в таблице с клиентами может быть очень много. Давайте посмотрим, как можно считать записи в таблице, используя разные вариации функции COUNT и ее условий.
К примеру, мы можем посчитать всех покупателей, у которых возраст будет 24 года. В этом случай SQL-запрос будет таким:
SELECT COUNT(*) as count FROM customers WHERE customers_age=24
В ответ на данный запрос мы получим результат — «2», потому что в нашей таблице есть всего 2 покупателя с таким возрастом.
Мы можем посчитать количество разных чеков наших покупателей. То ест ь мы будем считать количество разных сумм, которые оставили наши клиенты. Код SQL-запроса будет следующий:
SELECT COUNT(DISTINCT customers_purchase) as count FROM customers
В ответе на данный запрос мы получим ответ 3, потому что в нашей таблице всего 3 разных объема покупок: 4000, 5000 и 10000.
С помощью COUNT можно составлять и более сложные SQL-запросы. Например , в одном запросе мы можем посчитать сколько у нас разных возрастов в таблице и сколько у нас разных чеков покупки. В этом случае SQL-запрос будет выглядеть следующим образом:
SELECT
COUNT(DISTINCT costumers_age) as count_first,
COUNT(DISTINCT costumers_purchase) as count_second
FROM costumers
В результате такого запроса мы получим два столбца с названиями «count_first» с количеством возрастов «5» и «count_second» с количеством разных чеков «3».
Мы можем подсчитать общее количество записей в базе данных без особых условий. В этом случае SQL-запрос будет выглядеть следующим образом:
SELECT COUNT(*) as count FROM costumers
В ответ на этот запрос мы получим цифру «6», так как в нашей таблице всего 6 записей. Но тут есть одна хитрость. Когда мы указываем символ «*»(звездочка), тогда мы активируем подсчет абсолютно всех записей, даже тех, которые содержат в своих аргументах «NULL». Но вам не всегда нужно подсчитывать строки с «нулевым» значением. В этом случае в качестве аргумента функции COUNT нужно указать идентификатор какого-то столбца, тогда в результате будут отражаться только строки, которые содержат какие-то данные в указанном столбце. Например:
SELECT COUNT(customers_purchase) as count FROM costumers
В этом случае в результате мы получим сколько записей в базе данных имеют заполненные ячейки в столбце «customers_purchase». Важно помнить об этом. Потому что подсчеты строк в обоих случаях могут отличаться. К примеру, пользователь не совершил покупку, поэтому в столбце «customers_purchase» не заполнена ячейка. В этом случае при подсчете с COUNT(*) она попадет в результат, а при подсчете COUNT(customers_purchase) — нет.
Заключение
Как посчитать, сколько записей в базе данных? Самый верный способ — это использовать функцию COUNT. С помощью этой функции можно посчитать абсолютно все записи в базе данных: со значениями «NULL» и «NOT NULL». Помимо этого, совместно с функцией COUNT можно использовать команду WHERE и задавать условия подсчета записей, что делает работу функции COUNT очень гибкой.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.