MySQL-gruppen stöder MED ROLLUP som ger dig de bredare sammanställningarna:
Anta att din personaltabell är som:
Name, Role, Gender
John, Manager, Male
Susie, Manager, Female
...
En fråga som denna:
SELECT Gender, Role, COUNT(*)
FROM employee
GROUP BY Gender, Role
Skulle producera en bekant:
Male, Manager, 5
Male, Senior Manager, 2
Male, Employee, 20
etc
Nu, om vi lägger till MED ROLLUP:
SELECT Gender, Role, COUNT(*)
FROM employee
GROUP BY Gender, Role WITH ROLLUP
Då kommer MySQL också att ignorera rollen och bara gruppera på Gender:
Male, Manager, 5
Male, Senior Manager, 2
Male, Employee, 20
Male, NULL, 29
Rollraden NULL är raden där alla roller klumpas ihop och antalet är det totala antalet män. ROLLUP rullar från höger till vänster, så om du skulle GROUP BY a,b,c,d WITH ROLLUP
du skulle få extra rader för "alla a,b,c", "alla a,b" och "alla a" - så ordningen du placerar kön och roll i din grupp efter är viktig!
Slutligen, om du vill göra lite omformning av data så att du bara har en kolumn med text, som ditt exempel:
SELECT COALESCE(Role, Gender) as Desc, Ctr
(
SELECT Gender, Role, COUNT(*) as Ctr
FROM employee
GROUP BY Gender, Role WITH ROLLUP
) x --need to use a subquery - see manual
ORDER BY Gender, Role
Men notera att om du gör detta kommer du att stöta på ett problem eftersom det inte finns något kvar att konkret tala om för den manliga "Manager"-raden förutom den kvinnliga "Manager"-raden; det är helt beroende av beställningen, och det är ingen bra idé; det är därför vi vanligtvis lämnar delsummor på detta sätt till användargränssnittet, så att rapportpaketet kommer att hålla ihop data. Om du gör något som att konvertera detta till JSON, skicka det till en fjärrdator och beställningen går förlorad, blir informationen meningslös. Personligen skulle jag göra något mer som:
SELECT Gender, COALESCE(Role, '(TOTAL)') as Role, COUNT(*)
FROM employee
GROUP BY Gender, Role WITH ROLLUP
Den behåller data om manlig chef och kvinnlig chef på raden så att du kan skilja dem åt, men den konverterar NULL till (Total)
för att bättre ge information om vad det är
Det finns andra saker att diskutera, till exempel vad händer om kolumner innehåller NULL-värden själva, men jag pekar på The Fine Manual för det:https://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html