• 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

Object Storage Arubacloud
0 głosów
666 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ź 640 wizyt
pytanie zadane 22 marca 2017 w SQL, bazy danych przez PieroQQ Początkujący (420 p.)
0 głosów
1 odpowiedź 191 wizyt
0 głosów
3 odpowiedzi 1,057 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...