Serwer MySQL/MariaDB (pakiet XAMPP) i prosta baza danych z jedną tabelą uczniowie: id, klasa, imie, nazwisko. Chcę w jednym zapytaniu otrzymać liczbę wszystkich uczniów w klasie, liczbę dziewcząt i liczbę chłopców (standard - imiona zakończone i nie zakończone na 'a'). Z pojedynczymi kolumnami nie ma problemu
SELECT klasa, COUNT(*) FROM uczniowie GROUP BY klasa - dla wszystkich
SELECT klasa, COUNT(*) FROM uczniowie WHERE imie LIKE "%a" GROUP BY klasa - dla dziewcząt
SELECT klasa, COUNT(*) FROM uczniowie WHERE imie NOT LIKE "%a" GROUP BY klasa - dla chłopców
Problem zaczyna się, gdy chcę otrzymać wszystk0 w jednym zapytaniu. Próbowałam tak:
SELECT klasa, COUNT(*) AS "Liczba uczniów",
COUNT(SELECT * FROM uczniowie WHERE imie LIKE "%a") AS "Liczba dziewcząt",
COUNT(SELECT * FROM uczniowie WHERE imie NOT LIKE "%a") AS "Liczba chłopców"
FROM uczniowie
GROUP BY klasa
ale wywala bład #1064 - nieznana składnia. Pomogło obejście problemu:
SELECT klasa, COUNT(*) AS "Liczba uczniów",
SUM(CASE WHEN imie LIKE "%a" THEN 1 ELSE 0 END) AS "Liczba dziewcząt",
SUM(CASE WHEN imie NOT LIKE "%a" THEN 1 ELSE 0 END) AS "Liczba chłopców"
FROM uczniowie
GROUP BY klasa
I teraz pytanie: Gdzie robię błąd w pierwszej konstrukcji z samymi funkcjami COUNT?