0Pricing
Coding Interview Prep · Lekcja

Grupowanie według wielu kolumn i wyrażeń

Złożone klucze grupowania i grupowanie według obliczanych wartości

Grupowanie według wielu kolumn i wyrażeń to bezpłatna lekcja Coding Interview Prep na CoddyKit. To lekcja 3 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 Coding Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

Poza pojedynczym kluczem grupowania

Rzeczywiste raporty rzadko grupują dane według jednej kolumny. Rekruterzy przechodzą od „sprzedaży według regionu” do „sprzedaży według regionu i miesiąca”, aby sprawdzić, czy rozumieją Państwo złożone klucze grupowania.

Zasada skaluje się bez zmian: wyszczególnienie większej liczby kolumn w GROUP BY tworzy jeden wiersz dla każdej odrębnej kombinacji tych kolumn.

Znaczenie wielu kolumn

Gdy zapiszą Państwo GROUP BY region, product, kluczem grupy jest para (region, product). Każda unikatowa para staje się jednym wierszem wyniku.

  • 5 regionów i 4 produkty daje maksymalnie 20 grup.
  • Kombinacje, które nigdy nie występują, nie tworzą żadnego wiersza.
  • Kolejność kolumn w GROUP BY nie zmienia zbioru wyników, a jedynie czasami plan wykonania.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY region, product;

Nadal obowiązuje zasada dotycząca SELECT

Podstawowe ograniczenie pozostaje bez zmian. Każda niezagregowana kolumna w SELECT musi występować w GROUP BY. W przypadku złożonych kluczy należy po prostu wymienić je wszystkie.

Pominięcie jednej kolumny w grupowaniu według wielu kluczy jest najczęstszym błędem popełnianym pod presją podczas rozmowy. Lista GROUP BY powinna dokładnie odpowiadać niezagregowanym kolumnom w SELECT.

-- Both region and product appear in GROUP BY
SELECT region, product,
       COUNT(*) AS orders,
       AVG(amount) AS avg_amount
FROM sales
GROUP BY region, product;

Grupowanie według wyrażenia

Można grupować według obliczonej wartości, a nie tylko według surowej kolumny. Często pojawia się potrzeba grupowania sprzedaży według miesięcy, co oznacza grupowanie według daty obciętej do miesiąca albo wyodrębnionego z niej miesiąca.

Wyrażenie w GROUP BY musi odpowiadać wyrażeniu w SELECT. Silnik grupuje według obliczonego wyniku.

SELECT DATE_TRUNC('month', order_date) AS month,
       SUM(amount) AS monthly_total
FROM sales
GROUP BY DATE_TRUNC('month', order_date);

Grupowanie z przedziałami CASE

Przydatny wzorzec polega na grupowaniu według wyrażenia CASE w celu utworzenia własnych przedziałów. W ten sposób można tworzyć zestawienia „małych / średnich / dużych zamówień” bez tabeli pomocniczej.

Rekruterzy lubią ten przykład, ponieważ jednocześnie sprawdza logikę CASE i grupowanie według wartości pochodnej.

SELECT CASE
         WHEN amount < 50  THEN 'small'
         WHEN amount < 200 THEN 'medium'
         ELSE 'large'
       END AS bucket,
       COUNT(*) AS orders
FROM sales
GROUP BY CASE
         WHEN amount < 50  THEN 'small'
         WHEN amount < 200 THEN 'medium'
         ELSE 'large'
       END;

Grupowanie według pozycji kolumny

Wiele dialektów pozwala grupować według pozycji porządkowej: GROUP BY 1, 2 oznacza pierwszą i drugą kolumnę SELECT. Jest to zwięzłe, ale podatne na błędy.

Rekruterzy mogą zaakceptować taki zapis, ale należy zwrócić uwagę na ryzyko: zmiana kolejności listy SELECT po cichu zmienia sposób grupowania. W kodzie produkcyjnym należy preferować jawne wyrażenia.

-- 1 = month expression, 2 = region
SELECT DATE_TRUNC('month', order_date) AS month,
       region, SUM(amount)
FROM sales
GROUP BY 1, 2;

Wartości NULL tworzą własną grupę

Pułapka związana z obsługą NULL podczas grupowania: gdy kolumna używana do grupowania zawiera wartości NULL, wszystkie wiersze z wartością NULL zostają połączone w jedną grupę.

Różni się to od porównań równości, w których NULL nigdy nie jest równe NULL. Na potrzeby grupowania wartości NULL są traktowane jako „takie same” i tworzą jeden przedział. Rekruterzy uwielbiają tę pozorną sprzeczność.

-- Rows with region IS NULL all land in one group
SELECT region, COUNT(*) AS orders
FROM sales
GROUP BY region;

GROUPING SETS dla wielu poziomów

Aby w jednym zapytaniu utworzyć kilka poziomów szczegółowości grupowania, należy użyć GROUPING SETS. Oblicza ono każdy wymieniony zestaw kluczy i łączy wyniki.

Jest to sygnał poziomu średniozaawansowanego lub starszego: zamiast trzech osobnych zapytań połączonych operatorem UNION jedna instrukcja zwraca jednocześnie wyniki według regionu, według produktu oraz sumy całkowite.

SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS ((region), (product), ());

ROLLUP i CUBE

ROLLUP i CUBE to skrócone zapisy typowych zestawów grupowania. ROLLUP(region, product) zwraca grupy region+produkt, sumy częściowe dla regionów oraz sumę całkowitą, dzięki czemu doskonale nadaje się do raportów hierarchicznych.

CUBE generuje każdą kombinację wymienionych kolumn. Znajomość tych konstrukcji wyróżnia kandydata, który tworzył rzeczywiste zapytania raportowe.

SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP (region, product);

Przykład: miesięczny raport regionalny

Połączmy te koncepcje: obliczmy sumę i średnią sprzedaż dla każdego regionu i miesiąca, uwzględniając wyłącznie zrealizowane zamówienia i sortując wynik w czytelny sposób.

WHERE najpierw ogranicza liczbę wierszy, złożony klucz grupuje według regionu i wyrażenia określającego miesiąc, a ORDER BY porządkuje wynik. Jest to typowa kompletna odpowiedź na rozmowie kwalifikacyjnej dla analityka.

SELECT region,
       DATE_TRUNC('month', order_date) AS month,
       SUM(amount) AS total,
       AVG(amount) AS avg_order
FROM sales
WHERE status = 'completed'
GROUP BY region, DATE_TRUNC('month', order_date)
ORDER BY region, month;

Jak rozumować na głos

W przypadku każdego pytania dotyczącego grupowania złożonego należy jawnie określić klucz: „Grupuję według kombinacji X i Y, więc otrzymuję jeden wiersz dla każdej odrębnej pary (X, Y)”.

Następnie należy potwierdzić, że każda niezagregowana kolumna w SELECT znajduje się w tym kluczu, i wspomnieć, że wartości NULL łączą się w jedną grupę. Takie metodyczne wyjaśnienie jest doceniane podczas rozmów na poziomie średniozaawansowanym.

Szybkie sprawdzenie

Proszę przeanalizować złożone klucze grupowania.

Podsumowanie

Klucze złożone: wyszczególnienie wielu kolumn tworzy jeden wiersz dla każdej odrębnej kombinacji; każda niezagregowana kolumna w SELECT musi znajdować się w kluczu.

  • Można grupować według wyrażeń, przedziałów CASE albo pozycji porządkowych (pozycje są podatne na błędy).
  • Wartości NULL w kolumnie używanej do grupowania łączą się w jedną grupę.
  • GROUPING SETS, ROLLUP i CUBE tworzą wiele poziomów grupowania w jednym zapytaniu.
  • Filtry wierszy należy przenosić do WHERE przed grupowaniem.

Często zadawane pytania

Czy lekcja „Grupowanie według wielu kolumn i wyrażeń” jest bezpłatna?

Tak — pełny tekst „Grupowanie według wielu kolumn i wyrażeń” 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 Coding Interview Prep, przejdź na CoddyKit PRO. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Grupowanie według wielu kolumn i wyrażeń”?

Złożone klucze grupowania i grupowanie według obliczanych wartości Ćwiczysz Coding Interview Prep 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ąć Coding Interview Prep?

Nie wymagamy żadnego doświadczenia. Coding Interview Prep 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 3 z 4.

Ile czasu zajmuje lekcja „Grupowanie według wielu kolumn i wyrażeń”?

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 Coding Interview Prep?

Tak. Każda lekcja Coding Interview Prep 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. Zasada GROUP BY dotycząca kolumn SELECT
  2. HAVING a WHERE
  3. Grupowanie według wielu kolumn i wyrażeń
  4. Zliczanie i filtrowanie grup
← Powrót do Coding Interview Prep