Korzystanie z grupowania według dwóch pól i liczenia w języku SQL

85

Mam tabelę w mojej bazie danych mysql, która ma dwie kolumny: grupę i podgrupę. Zobacz poniżej.

 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

Próbuję uzyskać liczbę rekordów dla każdej unikalnej pary / podgrupy.

Tego oczekuję:

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

Po przeczytaniu kilku postów wypróbowałem kilka zapytań sql używając group by, count (), ale nie udało mi się uzyskać oczekiwanego wyniku. Jak mogę to naprawić?

Marc
źródło
2
chciałem inny przypadek, liczbę sugrup dla każdej grupy, więc to jest zapytanie SELECT a, b, COUNT (odrębne b) FROM tbl GROUP BY a
luky

Odpowiedzi:

139

Myślę, że szukasz: SELECT a, b, COUNT(a) FROM tbl GROUP BY a, b

Corbin
źródło
1
Cześć Corbinb. Dziękuję Ci bardzo. to działa. Zrobiłem to, co sugerujesz, ale zamiast grupowania za pomocą a, b zrobiłem grupowanie za pomocą a i b. Jeszcze raz dziękuję
Marc
3
a and bwygląda jak instrukcja do MySQL (właściwie nie jestem pewien, czy byłby to błąd składniowy, czy też zgrupowałby się na zwrocie 0 lub 1 - założyłbym błąd składni, szczególnie dla pól varchar). Aby pogrupować według wielu kolumn, wystarczy użyć przecinka.
Corbin
1
Wielkie dzięki!! .. Problem ze mną polegał na tym, że nie byłem w stanie sformułować swojego pytania i spędziłem dużo czasu na googlowaniu, w końcu wylądowałem tutaj, aby znaleźć proste i kropkowe rozwiązanie.
faheem farhan
Zamiast liczenia potrzebowałem pełnych szczegółów rekordu. Na przykład grupa grpA ma 2 podgrupy: subA i subB, więc muszę pobrać cały rekord dla każdej podgrupy. Czy ktoś może mi pomóc. @Corbin
admin 7798
2
chciałem liczyć sugroups dla każdej grupy, więc to jest zapytanie SELECT a, b, COUNT (odrębne b) FROM tbl GROUP BY a
luky
8
SELECT group,subGroup,COUNT(*) FROM tablename GROUP BY group,subgroup
user1127214
źródło
Zamiast liczenia potrzebowałem pełnych szczegółów rekordu. Na przykład grupa grpA ma 2 podgrupy: subA i subB, więc muszę pobrać cały rekord dla każdej podgrupy. Czy ktoś może mi pomóc. @ user1127214
admin 7798
7

Musisz zgrupować obie kolumny, grupę i podgrupę, a następnie użyć funkcji agregującej COUNT().

SELECT
  group, subgroup, COUNT(*)
FROM
  groups
GROUP BY
  group, subgroup
farzane
źródło
1
Wydaje mi się, że to literówka grupa! = Nazwa_grupy
csharpwinphonexaml
Zamiast liczenia potrzebowałem pełnych szczegółów rekordu. Na przykład grupa grpA ma 2 podgrupy: subA i subB, więc muszę pobrać cały rekord dla każdej podgrupy. Czy ktoś może mi pomóc. @farzane
admin 7798