Grup MySQL dengan dukungan WITH ROLLUP yang akan memberikan agregasi yang lebih luas untuk Anda:
Misalkan tabel karyawan Anda seperti:
Name, Role, Gender
John, Manager, Male
Susie, Manager, Female
...
Kueri seperti ini:
SELECT Gender, Role, COUNT(*)
FROM employee
GROUP BY Gender, Role
Akan menghasilkan familiar:
Male, Manager, 5
Male, Senior Manager, 2
Male, Employee, 20
dll
Sekarang, jika kita menambahkan WITH ROLLUP:
SELECT Gender, Role, COUNT(*)
FROM employee
GROUP BY Gender, Role WITH ROLLUP
Kemudian MySQL juga akan mengabaikan Role dan hanya mengelompokkan Gender:
Male, Manager, 5
Male, Senior Manager, 2
Male, Employee, 20
Male, NULL, 29
Baris peran NULL adalah baris di mana semua peran disatukan dan hitungannya adalah total Pria. ROLLUP berguling dari kanan ke kiri, jadi jika Anda GROUP BY a,b,c,d WITH ROLLUP
Anda akan mendapatkan baris tambahan untuk "semua a,b,c", "semua a,b" dan "semua a" - jadi urutan yang Anda masukkan Gender dan Peran dalam Grup Anda adalah penting!
Terakhir, jika Anda ingin melakukan sedikit pembentukan ulang data sehingga Anda hanya memiliki satu kolom teks, seperti contoh Anda:
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
Tetapi perhatikan bahwa jika Anda melakukan ini, Anda akan mengalami masalah karena tidak ada yang tersisa untuk secara konkret membedakan baris "Manajer" pria dari baris "Manajer" wanita; itu murni bergantung pada pesanan, dan itu bukan ide bagus; itu sebabnya kami biasanya meninggalkan subtotal dengan cara ini ke ujung depan, sehingga paket laporan akan menyimpan data bersama. Jika Anda melakukan sesuatu seperti mengonversi ini ke JSON, mengirimkannya ke komputer jarak jauh dan pemesanannya hilang, infonya menjadi tidak berarti. Secara pribadi saya akan melakukan sesuatu yang lebih seperti:
SELECT Gender, COALESCE(Role, '(TOTAL)') as Role, COUNT(*)
FROM employee
GROUP BY Gender, Role WITH ROLLUP
Itu menyimpan data manajer pria, dan manajer wanita di baris sehingga Anda dapat membedakannya, tetapi itu mengubah NULL menjadi (Total)
untuk lebih memberikan info tentang apa itu
Ada hal lain untuk didiskusikan seperti bagaimana jika kolom berisi nilai NULL itu sendiri, tetapi saya akan mengarahkan Anda ke The Fine Manual untuk itu:https://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html