0Pricing
SQL Academy · Lekcja

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;                -- position

Grouping 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 total

Puste 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

  1. COUNT, SUM, AVG, MIN, MAX
  2. GROUP BY dla jednej i wielu kolumn
  3. HAVING a WHERE
  4. Typowe pułapki: wartości NULL w agregatach
← Powrót do SQL Academy