GROUP BY dla jednej i wielu kolumn
Grupuj wiersze według jednej lub wielu kolumn, aby tworzyć sumy częściowe i zestawienia kategorii, oraz analizuj plany zapytań GROUP BY.
GROUP BY dla jednej i wielu kolumn to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Działanie GROUP BY
GROUP BY dzieli wiersze na grupy według wartości jednej lub kilku kolumn, a następnie stosuje funkcje agregujące dla każdej grupy.
Grupowanie według jednej kolumny
Łączna liczba zamówień dla każdego użytkownika:
SELECT user_id, COUNT(*) AS order_count, SUM(total) AS revenue
FROM orders
GROUP BY user_id
ORDER BY revenue DESC;Grupowanie według wielu kolumn
Podgrupy według kategorii i kraju:
SELECT country, category, SUM(total) AS revenue
FROM orders o
JOIN products p ON p.id = o.product_id
JOIN users u ON u.id = o.user_id
GROUP BY country, category
ORDER BY country, revenue DESC;Każda kolumna w SELECT musi być pogrupowana lub zagregowana
Standardowa reguła SQL:
-- WRONG — email is neither grouped nor aggregated:
SELECT user_id, email, COUNT(*)
FROM orders
GROUP BY user_id; -- ERROR
-- RIGHT — group by both, or use an aggregate:
SELECT user_id, MAX(email) AS email, COUNT(*)
FROM orders
GROUP BY user_id;GROUP BY według wyrażenia
Grupowanie według wyniku wyrażenia (np. przedziału obejmującego miesiąc):
SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY date_trunc('month', created_at)
ORDER BY month;GROUP BY według pozycji lub aliasu
Można grupować według pozycji na liście SELECT lub aliasu (PostgreSQL):
SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY month -- alias
ORDER BY 1; -- positionGrouping Sets, ROLLUP, CUBE
Obliczanie wielu grupowań w jednym zapytaniu — idealne do obliczania sum częściowych:
SELECT country, category, SUM(total)
FROM orders o JOIN ...
GROUP BY ROLLUP (country, category);
-- Returns: per (country, category), per country, grand totalPuste grupy nie istnieją
GROUP BY zwraca tylko grupy zawierające co najmniej jeden wiersz. Jeśli potrzebują Państwo wszystkich kategorii (w tym tych, w których nie ma żadnych zamówień), należy wykonać LEFT JOIN z listy głównej, a następnie użyć agregacji.
GROUP BY a indeksy
Planer zapytań może użyć agregacji haszującej (zbudować tablicę haszującą grup) albo strategii sortowania i grupowania. Indeksy na kolumnie używanej do grupowania mogą przyspieszyć drugie podejście.
Funkcje okna a GROUP BY
GROUP BY scala wiersze. Funkcje okna dodają kolumny z wynikami agregacji, zachowując jednocześnie każdy wiersz. Należy wybrać właściwe narzędzie — temat omówiono w lekcji Window Functions Deep Dive.
Aliasy w HAVING a WHERE
Porządek logiczny: FROM → WHERE → GROUP BY → HAVING → SELECT. WHERE nie może odwoływać się do funkcji agregujących, natomiast HAVING może.
Podsumowanie
GROUP BY to podstawowe narzędzie raportowania.
- Każda kolumna wybrana w SELECT musi być pogrupowana lub zagregowana
- Można grupować według kolumn, wyrażeń lub aliasów
- Do tabel krzyżowych należy używać ROLLUP/CUBE/GROUPING SETS
Szybkie sprawdzenie
W zapytaniu GROUP BY country czy lista SELECT może zawierać kolumnę city, która nie jest ani agregowana, ani uwzględniona w grupowaniu?
Często zadawane pytania
Czy lekcja „GROUP BY dla jednej i wielu kolumn” jest bezpłatna?
Tak — pełny tekst „GROUP BY dla jednej i wielu kolumn” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „GROUP BY dla jednej i wielu kolumn”?
Grupuj wiersze według jednej lub wielu kolumn, aby tworzyć sumy częściowe i zestawienia kategorii, oraz analizuj plany zapytań GROUP BY. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „GROUP BY dla jednej i wielu kolumn”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- COUNT, SUM, AVG, MIN, MAX
- GROUP BY dla jednej i wielu kolumn
- HAVING a WHERE
- Typowe pułapki: wartości NULL w agregatach