SQL получает количество повторяющихся значений в поле

У меня есть таблица, похожая на следующую. (Адреса на самом деле являются IP-адресами, но я сокращаю их для простоты.)

| Cust ID | Address |
| ------- | --------|
|    1    | 111     |
|    1    | 222     |
|    1    | 222     |
|    1    | 222     |
|    1    | 333     | 
|    2    | 444     | 
|    2    | 444     | 
|    2    | 444     |
|    2    | 444     |
|    3    | 555     | 

Я хотел бы получить количество разных адресов для каждого клиента, отсортированных по количеству:

| Cust ID | Address | Count |
| ------- | --------|-------|
|    2    | 444     |   4   |
|    1    | 222     |   3   |
|    1    | 111     |   1   |
|    1    | 333     |   1   |
|    3    | 555     |   1   |

Итак, как указано выше, клиент 2 использовал адрес 444 четыре раза; клиент 1 трижды использовал адрес 222, один раз 111 и один раз 333; и т. д.

FWIW, я использую mysql.

Спасибо!

Это не сумма count, а просто count().

Isolated 22.02.2023 01:54
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий
SELECT   CustID, Address, COUNT(*)
FROM     Cust
GROUP BY CustID, Address
ORDER BY COUNT(*) DESC;

Хорошее эмпирическое правило при использовании GROUP BY — передавать ему все выбранные столбцы, не используемые COUNT.

Попробуйте, это не считается ответом здесь. Если вы знаете, что это работает, объясните, как и почему это работает. Если вы не уверены, то не публикуйте ответ.

Ken White 22.02.2023 02:27
stackoverflow.com/a/6654348/16373651
zezosarg 22.02.2023 03:43

выберите идентификатор клиента, Адрес, count(Address) as Count

из Каста

Группировка по CustId, Адресу;

Чтобы агрегировать частоту адресов среди различных идентификаторов клиентов, предложение GROUP BY используется в сочетании с предложением COUNT для определения частоты адресов для каждого идентификатора клиента.

SELECT Cust ID, Address, COUNT(*) FROM TABLE GROUP BY Cust ID, Address ORDER BY COUNT(*) DESC;

Обратите внимание, что для предложения GROUP BY и идентификатор клиента, и адрес группируются. COUNT(*) используется для подсчета всех записей, которые появляются в каждой группе.

В качестве другого примера, если бы кто-то хотел определить только частоту адресов, не принимая во внимание, какому идентификатору клиента они принадлежат, можно было бы сгруппировать только по адресу:

SELECT Address, COUNT(*) FROM TABLE GROUP BY Address ORDER BY COUNT(*) DESC;

Однако группировка по нескольким столбцам (как в первом случае) сужает результаты, чтобы обеспечить рассмотрение агрегатов по обоим соответствующим столбцам.

Другие вопросы по теме