Использование группы по двум полям и подсчета в SQL

85

У меня есть таблица в моей базе данных mysql, в которой есть два столбца: группа и подгруппа. Смотри ниже.

 group, subGroup
 grp-A, sub-A
 grp-A, sub-A
 grp-A, sub-B      
 grp-B, sub-A
 grp-B, sub-B
 grp-B, sub-B

Я пытаюсь получить количество записей для каждой уникальной пары / подгруппы.

Вот чего я ожидал:

group, subGroup, count
grp-A, sub-A, 2
grp-A, sub-B, 1
grp-B, sub-A, 1
grp-B, sub-B, 2

Прочитав несколько сообщений, я попробовал несколько sql-запросов, используя group by, count (), но мне не удалось получить ожидаемый результат. Как я могу это исправить?

Марк
источник
2
Мне нужен еще один случай, количество групп для каждой группы, так что это запрос SELECT a, b, COUNT (отдельный b) FROM tbl GROUP BY a
luky

Ответы:

139

Я думаю, вы ищете: SELECT a, b, COUNT(a) FROM tbl GROUP BY a, b

Корбин
источник
1
Привет, Корбинб. Большое спасибо. это работает. Я сделал то, что вы предлагаете, но вместо группы a, b я сделал группу a и b. Еще раз спасибо
Марк
3
a and bвыглядит как выражение для MySQL (на самом деле не уверен, будет ли это синтаксической ошибкой или он будет группироваться при возврате 0 или 1 - я бы предположил синтаксическую ошибку, особенно для полей varchar). Чтобы сгруппировать по нескольким столбцам, вы просто используете запятую.
Corbin
1
Большое спасибо!! .. Проблема со мной заключалась в том, что я не мог сформулировать свой вопрос и потратил много времени на поиск в Google, наконец, нашел здесь простое и точечное решение.
faheem farhan
Вместо подсчета мне понадобилась вся запись. Например, у grpA есть 2 подгруппы: subA и subB, поэтому мне нужно получить всю запись для каждой из подгрупп. Может кто-нибудь мне помочь. @Corbin
админ 7798
2
Мне нужно количество групп для каждой группы, так что это запрос SELECT a, b, COUNT (independent b) FROM tbl GROUP BY a
luky
8
SELECT group,subGroup,COUNT(*) FROM tablename GROUP BY group,subgroup
user1127214
источник
Вместо подсчета мне понадобилась вся запись. Например, у grpA есть 2 подгруппы: subA и subB, поэтому мне нужно получить всю запись для каждой из подгрупп. Может кто-нибудь мне помочь. @ user1127214
админ 7798
7

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

SELECT
  group, subgroup, COUNT(*)
FROM
  groups
GROUP BY
  group, subgroup
фарзан
источник
1
Мне кажется опечаткой group! =
GroupName
Вместо подсчета мне понадобилась вся запись. Например, у grpA есть 2 подгруппы: subA и subB, поэтому мне нужно получить всю запись для каждой из подгрупп. Может кто-нибудь мне помочь. @farzane
админ 7798