Lekcja 9 / raportowanie
Raporty: COUNT, GROUP BY, HAVING i CASE WHEN
Przejdziesz od listy rekordów do prostego raportu. To moment, w którym SQL zaczyna odpowiadać nie tylko „które rekordy?”, ale też „ile ich jest i które grupy wymagają uwagi?”.
Sytuacja z pracy
Product manager pyta: „Ile zgłoszeń mamy w każdym statusie i które statusy wymagają szybkiej uwagi?”. Nie chcesz wysyłać surowej listy zgłoszeń. Chcesz przygotować mały raport.
Dane startowe
| id | status | severity |
|---|---|---|
| 1 | open | high |
| 2 | open | medium |
| 3 | closed | low |
| 4 | in_review | high |
Nowe pojęcia
Liczy rekordy w grupie.
Zbiera rekordy według wspólnej wartości, np. statusu.
Filtruje grupy po policzeniu.
Dodaje własną etykietę na podstawie warunku.
Zapytanie SQL
SELECT
status,
COUNT(*) AS reports_count,
CASE
WHEN COUNT(*) >= 2 THEN 'high attention'
ELSE 'normal'
END AS risk_label
FROM bug_reports
GROUP BY status;
Wynik
| status | reports_count | risk_label |
|---|---|---|
| open | 2 | high attention |
| closed | 1 | normal |
| in_review | 1 | normal |
HAVING na małym przykładzie
Jeśli chcesz pokazać tylko grupy z co najmniej dwoma zgłoszeniami, używasz HAVING.
SELECT status, COUNT(*) AS reports_count
FROM bug_reports
GROUP BY status
HAVING COUNT(*) >= 2;
Co to znaczy dla QA?
Raport nie zastępuje analizy pojedynczych rekordów, ale pomaga ustalić priorytet.
Jeśli status open ma najwięcej zgłoszeń, możesz zacząć od niego i dopiero potem wejść w szczegóły.
Mini-zadanie
Napisz zapytanie, które liczy zgłoszenia po statusie bez CASE WHEN.
Ćwiczenie praktyczne
Dodaj etykietę high attention, jeśli liczba zgłoszeń dla statusu jest większa lub równa 2.
Potem napisz jedno zdanie, co taka etykieta daje osobie nietechnicznej.
Quiz
Co robi COUNT(*)?
Liczy rekordy.
Po co jest GROUP BY?
Żeby policzyć rekordy osobno dla każdej grupy, np. każdego statusu.
Czym różni się WHERE od HAVING?
WHERE filtruje rekordy przed grupowaniem, HAVING filtruje grupy po policzeniu.
Po co CASE WHEN?
Żeby dodać własną etykietę lub kategorię na podstawie warunku.
Co dalej?
Masz już wszystkie klocki: czytanie danych, filtrowanie, NULL, sortowanie, JOIN-y i raporty. W finale połączysz je w mały audyt checkoutu.