• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
798 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ź 778 wizyt
pytanie zadane 22 marca 2017 w SQL, bazy danych przez PieroQQ Początkujący (420 p.)
0 głosów
1 odpowiedź 227 wizyt
0 głosów
3 odpowiedzi 1,310 wizyt

93,164 zapytań

142,175 odpowiedzi

321,925 komentarzy

62,491 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 453p. - Marcin Putra
  2. 453p. - dia-Chann
  3. 447p. - Łukasz Piwowar
  4. 443p. - CC PL
  5. 431p. - Łukasz Eckert
  6. 428p. - rafalszastok
  7. 423p. - Michal Drewniak
  8. 423p. - Adrian Wieprzkowicz
  9. 418p. - rucin93
  10. 415p. - Mikbac
  11. 410p. - Piotr Aleksandrowicz
  12. 408p. - ksalekk
  13. 402p. - Mariusz Fornal
  14. 401p. - Dawid128
  15. 392p. - ikarek-one
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...