MySQL-gruppen understøtter MED ROLLUP, der vil give dig de bredere samlinger:
Antag, at dit medarbejderbord er sådan:
Name, Role, Gender
John, Manager, Male
Susie, Manager, Female
...
En forespørgsel som denne:
SELECT Gender, Role, COUNT(*)
FROM employee
GROUP BY Gender, Role
Ville producere en velkendt:
Male, Manager, 5
Male, Senior Manager, 2
Male, Employee, 20
osv.
Nu, hvis vi tilføjer MED ROLLUP:
SELECT Gender, Role, COUNT(*)
FROM employee
GROUP BY Gender, Role WITH ROLLUP
Så vil MySQL også ignorere rollen og bare gruppere på køn:
Male, Manager, 5
Male, Senior Manager, 2
Male, Employee, 20
Male, NULL, 29
NULL-rollerækken er rækken, hvor alle roller er klumpet sammen, og antallet er det samlede antal hanner. ROLLUP ruller fra højre mod venstre, så hvis du skulle GROUP BY a,b,c,d WITH ROLLUP
du vil få ekstra rækker for "alle a,b,c", "alle a,b" og "alle a" - så rækkefølgen du placerer køn og rolle i din gruppe efter er vigtig!
Til sidst, hvis du vil lave en smule dataomformning, så du kun har én kolonne med tekst, som dit eksempel:
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 bemærk, at hvis du gør dette, vil du løbe ind i et problem, fordi der ikke er noget tilbage til konkret at fortælle den mandlige "Manager" række bortset fra den kvindelige "Manager" række; det er udelukkende afhængig af ordren, og det er ikke nogen god idé; Det er derfor, vi typisk overlader subtotal på denne måde til frontend, så rapportpakken vil holde dataene samlet. Hvis du gør noget som at konvertere dette til JSON, sende det til en fjerncomputer, og bestillingen går tabt, bliver informationen meningsløs. Personligt ville jeg gøre noget mere som:
SELECT Gender, COALESCE(Role, '(TOTAL)') as Role, COUNT(*)
FROM employee
GROUP BY Gender, Role WITH ROLLUP
Det gemmer data for mandlige ledere og kvindelige ledere på rækken, så du kan skelne dem fra hinanden, men det konverterer NULL til (Total)
for bedre at give information om, hvad det er
Der er andre ting at diskutere, såsom hvad hvis kolonner selv indeholder NULL-værdier, men jeg vil henvise dig til The Fine Manual for det:https://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html