0Pricing
SQL Interview Prep · Lekcja

Zliczanie i filtrowanie grup

Znajdowanie grup spełniających określony próg, na przykład klientów z większą niż N liczbą zamówień

Zliczanie i filtrowanie grup to bezpłatna lekcja SQL Interview Prep na CoddyKit. To lekcja 4 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 Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

Najczęstsze pytanie dotyczące grupowania

„Znajdź klientów, którzy złożyli więcej niż N zamówień” to klasyczne zadanie rekrutacyjne dotyczące GROUP BY. Warianty pojawiają się bardzo często: produkty sprzedane więcej niż X razy, działy zatrudniające co najmniej Y pracowników, dni z ponad Z logowaniami.

W każdym przypadku obowiązuje ten sam schemat: grupowanie, zliczanie, a następnie filtrowanie grup za pomocą HAVING.

Krok pierwszy: zliczanie w każdej grupie

Najpierw należy zliczyć wiersze w każdej grupie. Proszę grupować według klucza definiującego „klienta” lub „produkt”, a następnie zastosować COUNT(*).

Daje to jeden wiersz na grupę wraz z jej rozmiarem. Filtrowanie nie zostało jeszcze wykonane — mierzony jest jedynie rozmiar każdej grupy.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;

Krok drugi: filtrowanie za pomocą HAVING

Teraz należy pozostawić tylko grupy spełniające określony próg. Warunek dotyczy wartości agregującej, więc musi znajdować się w HAVING, a nie w WHERE.

Należy odczytać to następująco: „pogrupować zamówienia według klientów, a następnie pozostawić klientów, których liczba zamówień przekracza pięć”. Jest to kompletna odpowiedź na klasyczne zadanie.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

COUNT DISTINCT a zliczanie wszystkich wartości

Proszę zwrócić uwagę na sformułowanie. „Klienci, którzy zamówili więcej niż 3 różne produkty” wymagają użycia COUNT(DISTINCT product_id), a nie COUNT(*).

  • COUNT(*) zlicza wiersze w grupie.
  • COUNT(DISTINCT col) zlicza unikatowe wartości inne niż NULL.

Rekruterzy umieszczają w treści słowa „różne” lub „unikatowe”, aby sprawdzić, czy kandydat sięgnie po DISTINCT.

SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;

Filtrowanie według SUM zamiast COUNT

Ta sama struktura obsługuje sumy. „Klienci, którzy wydali łącznie więcej niż 1000” oznacza grupowanie według klienta i filtrowanie według SUM(amount).

Dowolna funkcja agregująca może określać warunek HAVING: COUNT, SUM, AVG, MAX lub MIN. Rozpoznanie miary wskazanej w treści zadania podpowiada, według której funkcji agregującej należy filtrować.

SELECT customer_id, SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;

Wiele warunków grupowania

HAVING może łączyć warunki za pomocą AND/OR, także warunki dotyczące różnych funkcji agregujących. „Klienci z ponad 5 zamówieniami ORAZ średnią wartością zamówienia powyżej 100” to jeden warunek HAVING.

Każdy warunek odwołuje się do własnej funkcji agregującej; wszystkie są obliczane po grupowaniu. Pokazuje to, że potrafią Państwo w przejrzysty sposób wyrażać złożone reguły biznesowe.

SELECT customer_id,
       COUNT(*) AS orders,
       AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;

Połączenie WHERE i HAVING

Często trzeba odfiltrować wiersze przed ich zliczeniem. „Wśród zamówień z tego roku znajdź klientów z więcej niż 5 zamówieniami” oznacza użycie WHERE dla daty i HAVING dla liczby zamówień.

WHERE najpierw zmniejsza liczbę wierszy, a następnie wykonywane są grupowanie i próg określony w HAVING. Poprawne zastosowanie obu klauzul w jednym zapytaniu jest oznaką kompetencji na poziomie średniozaawansowanym.

SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;

Wyszukiwanie duplikatów

Blisko spokrewniony przypadek to „znajdź zduplikowane adresy e-mail”. Należy grupować według kolumny, która powinna zawierać unikatowe wartości, i pozostawić grupy, w których liczba elementów przekracza jeden.

Ten pojedynczy wzorzec wykrywa zduplikowane klucze, powtórzone transakcje oraz dowolne wartości występujące częściej, niż powinny. Rekruterzy zadają to pytanie, aby sprawdzić, czy dostrzegają Państwo możliwość użycia grupowania jako narzędzia do usuwania duplikatów.

SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

Grupy spełniające dokładnie określoną liczbę

Progi nie zawsze oznaczają „większe niż”. „Klienci z dokładnie jednym zamówieniem” wymagają użycia HAVING COUNT(*) = 1; „co najmniej 3” — >= 3.

W treści zadania proszę zwracać uwagę na słowo określające granicę: „więcej niż”, „co najmniej”, „dokładnie”, „mniej niż”. Każde z nich odpowiada innemu operatorowi porównania, a podczas rozmów rekrutacyjnych sprawdza się tę precyzję.

-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;

Zwracanie wyłącznie kluczy

Czasami treść zadania wymaga tylko identyfikatorów spełniających warunek, a nie liczników — często po to, by wykorzystać je w kolejnym zapytaniu. Nadal grupuje się dane i filtruje grupy, ale w SELECT wybiera tylko klucz.

Następnie można opakować to w podzapytanie IN albo użyć złączenia, aby pobrać pełne rekordy tych klientów. Znajomość takiego komponowania zapytań świadczy o zaawansowanych umiejętnościach.

SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

Schemat postępowania na rozmowie rekrutacyjnej

W przypadku każdego pytania o „grupy spełniające próg” proszę głośno przejść przez cztery kroki: (1) wskazać klucz grupowania, (2) wybrać miarę agregacji, (3) ustalić operator porównania na podstawie sformułowania, (4) umieścić filtry wierszy w WHERE, a filtr agregatu w HAVING.

Ten schemat rozwiązuje całą rodzinę problemów związanych ze zliczaniem i filtrowaniem.

Szybki test

Proszę wybrać poprawne zapytanie dla podanego zadania.

Podsumowanie

Wzorzec: grupuj według klucza, agreguj dane, filtruj grupy za pomocą HAVING. Rozwiązuje to problemy typu „więcej niż N zamówień”, pozwala znaleźć klientów wydających najwięcej, duplikaty i klientów dokonujących jednego zakupu.

  • Używaj COUNT(*) dla wierszy oraz COUNT(DISTINCT col) dla unikalnych wartości.
  • Dopasuj operator porównania do sformułowania w zadaniu.
  • Filtry wierszy umieszczaj w WHERE, a filtry agregatów w HAVING.
  • Wybierz tylko klucz, aby przekazać go do podzapytania IN albo złączenia.

Często zadawane pytania

Czy lekcja „Zliczanie i filtrowanie grup” jest bezpłatna?

Tak — pełny tekst „Zliczanie i filtrowanie grup” 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 Interview Prep, przejdź na CoddyKit PRO. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Zliczanie i filtrowanie grup”?

Znajdowanie grup spełniających określony próg, na przykład klientów z większą niż N liczbą zamówień Ćwiczysz SQL 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ąć SQL Interview Prep?

Nie wymagamy żadnego doświadczenia. SQL 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 4 z 4.

Ile czasu zajmuje lekcja „Zliczanie i filtrowanie grup”?

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

Tak. Każda lekcja SQL 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 SQL Interview Prep