У меня есть таблица, похожая на следующую. (Адреса на самом деле являются 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.
Спасибо!
SELECT CustID, Address, COUNT(*)
FROM Cust
GROUP BY CustID, Address
ORDER BY COUNT(*) DESC;
Хорошее эмпирическое правило при использовании GROUP BY — передавать ему все выбранные столбцы, не используемые COUNT.
Попробуйте, это не считается ответом здесь. Если вы знаете, что это работает, объясните, как и почему это работает. Если вы не уверены, то не публикуйте ответ.
выберите идентификатор клиента, Адрес, 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;
Однако группировка по нескольким столбцам (как в первом случае) сужает результаты, чтобы обеспечить рассмотрение агрегатов по обоим соответствующим столбцам.
Это не сумма count, а просто count().