Перейти к содержимому

Как в sql посчитать количество повторяющихся значений

  • автор:

Как в sql посчитать количество повторяющихся значений

Можно попробовать использовать функцию COUNT() в сочетании с оператором GROUP BY .

Предположим, у нас есть таблица «orders» с колонками «customer_name» и «order_date» , и мы хотим посчитать, сколько заказов было сделано каждым клиентом. Мы можем написать следующий SQL-запрос:

Этот запрос выберет все уникальные значения из колонки «customer_name» в таблице «orders» и подсчитает количество строк, связанных с каждым уникальным значением. Результатом запроса будет таблица со столбцами «customer_name» и «order_count» , в которой каждая строка будет показывать клиента и количество его заказов.

Как посчитать уникальные значения в sql

Используем DISTINCT и COUNT() . Первый удалит дубликаты, а вторая посчитает количество строк.

SELECT COUNT(DISTINCT car_id) FROM orders; -- покажет количество уникальных car_id в таблице orders 

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 можно использовать и другие встроенные функции, но их мы будем изучать позже.

Научись программировать на Python прямо сейчас!

  • Научись программировать на Python прямо сейчас
  • Бесплатный курс

Если этот сайт оказался вам полезен, пожалуйста, посмотрите другие наши статьи и разделы.

Запросы sql, как посчитать количество повторений и вывести?

У меня есть некий запрос, который вывод название аэропортов и продолжительность рейсов, из этих аэропортов, больше часа
Типо того:
Departure_airport | time
Абакан | 4:25:00
Абакан | 4:00:00
Астрахань | 2:20:00
Астрахань | 2:56:00
Астоахань | 1:05:00
Как сделать запрос подсчёта одинаковых полей по названию
Типо того:
Абакан — 2
Астрахань — 3?

Дополнен 4 года назад
Работаю в sql Shell
Лучший ответ

GROUP BY по полю, кол-во которого надо считать и CONT в выдаче.

SELECT name, count(*) FROM . WHERE . GROUP BY name

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *