m Matura-Online.pl Rozwiązania zadań maturalnych
MINP-R0-100-2605 Otwarte rozszerzone 9 pkt Trudność: ★★★★★

Zadanie 8

Matura z informatyki, maj 2026, poziom rozszerzony

Wymaganie:

I.4) dobiera odpowiednią metodę lub technikę algorytmiczną i struktury danych. Wyszukiwanie i przetwarzanie informacji w relacyjnej bazie danych; zapytania SQL z łączeniem tabel.

Treść zadania

Zadanie 8. Sieć sklepów. Trzy pliki z danymi o sprzedaży (1.–3. dnia miesiąca, styczeń–czerwiec 2025, godz. 22:00–23:59), rozdzielone tabulatorami:

  • klienci.txtIdKlienta, Imie, Nazwisko, Plec (K/M)
  • transakcje.txtIdTransakcji, DataTransakcji, IdKlienta, IdSklepu, IdSprzedawcy (puste przy kasie samoobsługowej)
  • opis_transakcji.txtIdTransakcji, IdProduktu, Cena, Liczba

8.1. (0–1) Imię i nazwisko klienta, który dokonał najwięcej transakcji.

8.2. (0–2) Ile kobiet i ilu mężczyzn nie kupiło niczego w całym okresie.

8.3. (0–2) Liczba różnych sklepów z transakcjami w kasach samoobsługowych oraz łączna kwota zapłacona w tych kasach.

8.4. (0–2) IdSprzedawcy, który obsługiwał klientów w największej liczbie różnych sklepów w jednym miesiącu, oraz ten miesiąc.

8.5. (0–2) Dodano tabele Produkty (IdProduktu, IdKategorii, Nazwa, Opis) i Kategorie (IdKategorii, NazwaKategorii). Napisz zapytanie SQL wypisujące wszystkie zakupione produkty (IdProduktu, Nazwa) z kategorii spozywcze, których opis zawiera fragment do ekspresu kolbowego.

Źródło: arkusz CKE MINP-R0-100-2605. Otwórz oryginalny PDF

Rozwiązanie

8.1. Marcelino Kruk

8.2. K – 689 i M – 651

8.3. 28 sklepów, kwota 19 443,29

8.4. 14, styczeń — sprzedawca o IdSprzedawcy 14, w styczniu.

8.5. Przykładowe rozwiązanie z klucza CKE:

SELECT Produkty.IdProduktu, Nazwa
FROM Opis_transakcji
JOIN Produkty
  ON Opis_transakcji.IdProduktu = Produkty.IdProduktu
JOIN Kategorie
  ON Kategorie.IdKategorii = Produkty.IdKategorii
WHERE NazwaKategorii = 'spozywcze'
  AND Opis LIKE '%do ekspresu kolbowego%';
Typowy błąd / pułapka

8.2 — pytanie jest o klientów, których NIE MA w transakcjach. To różnica zbiorów, nie filtr po tabeli transakcji. Trzeba wziąć wszystkich z klienci.txt i odjąć tych, którzy wystąpili w transakcje.txt, a dopiero potem policzyć wg płci. Liczenie „klientów z zerową liczbą transakcji" wprost w tabeli transakcji da 0, bo tacy klienci w ogóle się w niej nie pojawiają.

8.3 — puste pole IdSprzedawcy oznacza kasę samoobsługową. Warunek to IdSprzedawcy IS NULL (albo pusty łańcuch po imporcie z pliku), a nie jakaś konkretna wartość. Kwotę trzeba policzyć jako SUM(Cena * Liczba) po złączeniu z opis_transakcji — nie samą SUM(Cena), bo klient kupował po kilka sztuk.

8.4 — „w największej liczbie RÓŻNYCH sklepów" wymaga COUNT(DISTINCT IdSklepu). Bez DISTINCT policzysz transakcje, nie sklepy, i wyjdzie inny sprzedawca. Grupowanie musi być po sprzedawcy i miesiącu naraz.

8.5 — słowo „zakupione" jest istotne. Zapytanie musi wychodzić od Opis_transakcji (albo tam dołączać), bo pytamy tylko o produkty, które faktycznie ktoś kupił. Sam JOIN tabel Produkty i Kategorie wypisałby cały katalog. Drugi wymóg to LIKE z procentami po obu stronach — fragment ma być zawarty w opisie, niekoniecznie na początku.

Treść zadania (CKE)

Zadanie 8 — informatyka 2026, poziom rozszerzony, arkusz CKE
Fragment arkusza CKE MINP-R0-100-A-2605 — zadanie 8. Na podstawie: CKE, matura maj 2026, informatyka PR Oryginalny PDF CKE

Model danych

klienci (IdKlienta, Imie, Nazwisko, Plec)
    │ 1

    │ n
transakcje (IdTransakcji, DataTransakcji, IdKlienta, IdSklepu, IdSprzedawcy)
    │ 1

    │ n
opis_transakcji (IdTransakcji, IdProduktu, Cena, Liczba)

Wartość transakcji to SUM(Cena * Liczba) po wierszach z opis_transakcji.

Zapytania do podpunktów 8.1–8.4

-- 8.1 klient z największą liczbą transakcji
SELECT k.Imie, k.Nazwisko, COUNT(*) AS ile
FROM transakcje t JOIN klienci k ON k.IdKlienta = t.IdKlienta
GROUP BY k.IdKlienta ORDER BY ile DESC LIMIT 1;

-- 8.2 klienci bez żadnej transakcji, wg płci
SELECT Plec, COUNT(*)
FROM klienci
WHERE IdKlienta NOT IN (SELECT IdKlienta FROM transakcje)
GROUP BY Plec;

-- 8.3 kasy samoobsługowe: liczba sklepów i łączna kwota
SELECT COUNT(DISTINCT t.IdSklepu), SUM(o.Cena * o.Liczba)
FROM transakcje t JOIN opis_transakcji o ON o.IdTransakcji = t.IdTransakcji
WHERE t.IdSprzedawcy IS NULL;

-- 8.4 sprzedawca w największej liczbie różnych sklepów w jednym miesiącu
SELECT IdSprzedawcy, MONTH(DataTransakcji) AS m,
       COUNT(DISTINCT IdSklepu) AS sklepy
FROM transakcje
WHERE IdSprzedawcy IS NOT NULL
GROUP BY IdSprzedawcy, m
ORDER BY sklepy DESC LIMIT 1;

Trzy konstrukcje SQL, które to zadanie sprawdza

KonstrukcjaPo co tutaj
COUNT(DISTINCT …)liczenie różnych sklepów, nie transakcji (8.3, 8.4)
NOT IN / LEFT JOIN … IS NULLklienci bez transakcji (8.2)
LIKE '%fragment%'dopasowanie fragmentu tekstu (8.5)

Punktacja CKE

  • 8.1. 1 pkt · 8.2. 2 pkt · 8.3. 2 pkt · 8.4. 2 pkt.
  • 8.5. 2 pkt — 1 pkt za wybór pól i połączenie tabel, 1 pkt za warunki wyszukiwania.
  • Razem: 9 pkt.

Rozumiesz, jak to rozwiązać?

Przećwicz podobne typy zadań w aplikacji

matury-online.pl ma tysiące zadań pogrupowanych po dziedzinach. Sprawdź, czy temat „bazy danych, SQL, JOIN, LIKE, analiza transakcji" zrobisz samodzielnie.

Otwórz matury-online.pl