• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z podzapytaniem SQL w funkcji agregującej COUNT

0 głosów
419 wizyt
pytanie zadane 15 listopada 2017 w SQL, bazy danych przez niezalogowany

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?

1 odpowiedź

0 głosów
odpowiedź 21 listopada 2017 przez whistler Obywatel (1,420 p.)
Spróbuj tak:

 

SELECT klasa, count(*) as liczba_osob,

COUNT(CASE WHEN imie LIKE '%a' THEN 1 END) as liczba_dziewczyn,

COUNT(CASE WHEN imie not like '%a' THEN 1 END) as liczba_chlopakow

FROM uczniowie

GROUP BY 1;

Podobne pytania

0 głosów
1 odpowiedź 362 wizyt
pytanie zadane 22 marca 2017 w SQL, bazy danych przez PieroQQ Początkujący (420 p.)
0 głosów
1 odpowiedź 109 wizyt
0 głosów
3 odpowiedzi 690 wizyt

86,541 zapytań

135,291 odpowiedzi

300,649 komentarzy

57,288 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...