Zastosowanie kwerend krzyżowych

Kwerendy krzyżowe przedstawiają informacje zawarte w danej tabeli w nowy sposób – pozwalają m.in. na obliczanie średnich lub maksimów, a także na grupowanie rekordów i kolumn zgodnie z dowolnymi warunkami.

Dla zainteresowanych

W programie LibreOffice Base domyślnie nie ma narzędzi ani komend SQL przeznaczonych do tworzenia kwerend krzyżowych. Dokumentacja LibreOffice wskazuje, że w razie potrzeby utworzenia takiego zestawienia należy wykorzystać osobny program — LibreOffice Calc.

Prosta kwerenda krzyżowa

Tworząc kwerendę krzyżową, wybieramy dwie kolumny z tabeli początkowej. Wartości z pierwszej kolumny staną się nowymi nazwami rekordów, a z drugiej – nazwami kolumn w tabeli wynikowej. Takie „skrzyżowanie” wartości z dwóch kolumn nadaje kwerendzie jej nazwę.

Tego rodzaju przekształcenie nie dodaje żadnych nowych informacji do tabeli, ale prezentuje je w bardziej zrozumiały sposób.

Przyjrzyjmy się tej kwestii na przykładzie tabeli przedstawiającej uczniów pewnego technikum oraz ich oceny z języka polskiego i angielskiego. W tej tabeli wywołamy kwerendę.

R1BZMkEF9nw18

Tabelę możesz pobrać z załącznika:

RXxslC3lOLki3

Tabela w postaci pliku tekstowego.

Plik TXT o rozmiarze 304.00 B w języku polskim

Tablica posiada wiele powtórzeń, np. nazwiska i przedmioty, co utrudnia wgląd w zawartość tablicy. Najlepszym rozwiązaniem byłoby znormalizowanieNormalizacjaznormalizowanie tej tablicy, jednak w tym przykładzie wykonamy kwerendę krzyżową, która przedstawi tablicę w przystępniejszej formie.

Utworzymy kwerendę, w której nazwiska uczniów będą nazwami rekordów, a przedmioty –  oznaczeniami kolumn (nazwami pól). Przy każdym nazwisku znajduje się teraz lista ocen z kolejnych przedmiotów, dzięki czemu tabela jest przejrzysta.

Wynik kwerendy krzyżowej:

R9qgjKjTpzsOL
Dla zainteresowanych

W kwerendzie krzyżowej wybór tego, co stanie się nazwami rekordów, a co nazwami kolumn, jest symetryczny. Równie dobrze można ustawić przedmioty jako nazwy rekordów, a nazwiska jako nazwy kolumn. W ten sposób otrzymamy tę samą tabelę, jedynie z lekko zmienionym układem.

Kreator kwerend

Przedstawioną tabelę można łatwo utworzyć przez wbudowany kreator kwerend. Znajduje się on w zakładce Tworzenie.

Najpierw należy wybrać Kreator kwerend krzyżowych w oknie dialogowym.

RnhOwVhAYeydE

W kolejnym kroku dokonuje się wyboru kolumn, które będą opisywały każdy wiersz. W tym przypadku są to ImięNazwisko.

RqZBEC7GrMR31

Zwróć uwagę na fakt, że po przeniesieniu tych pół do okna Wybrane pola, pojawią się one w przykładzie tabeli na dole okna, tak jak na przedstawionej ilustracji.

Następnie należy wybrać pola, które staną się kolumnami tworzonego przez nas zestawienia. W tym przypadku chcemy wypisać Oceny dla każdego Przedmiotu, w związku czym wybieramy pole Przedmiot, jako nagłówki kolumn.

RXfFpXkRGi3Ta

Ta zmiana także jest widoczna w przykładzie na dole okna.

Ostatnim krokiem jest wybranie, jaka informacja ma się pojawić na skrzyżowaniu wierszy i kolumn. Są to oczywiście Oceny.

R10ztIhhIqjJS

Oprócz pola należy wybrać także funkcję, która zostanie wykorzystana w przypadku kiedy istnieje wiele wartości dla wybranych przez nas wierszy i kolumn. Dotyczy to sytuacji, kiedy np. jeden uczeń (opisywany przez Imię i Nazwisko) posiada wiele ocen z jednego przedmiotu.

W tabeli występującej w tym zadaniu nie ma tego problemu — każdy uczeń ma tylko jedną ocenę z każdego przedmiotu. W związku z czym możemy wybrać np. funkcję Maksimum.

Po wybraniu opcji Dalej zaprojektowane przez nas zestawienie zostanie utworzone.

Składnia SQL

Mimo że składnia SQL jest bardziej złożona, to daje także znacznie większe możliwości w modyfikacji zestawienia, które projektujemy. Utwórzmy więc analogiczne zestawienie, wykorzystując ten język.

Oprócz zwykłego polecenia SELECT w kwerendach krzyżowych wykorzystuje się dwie dodatkowe operacje:

PIVOT – wybiera kolumnę, której wartości staną się nowymi nazwami kolumn,

TRANSFORM – wybiera wartości, które mają się pojawić w polach na skrzyżowaniu kolumn i rekordów, w tym przypadku są to oceny.

Składnia kwerendy krzyżowej to:

Linia 1. TRANSFORM MAX otwórz nawias okrągły Ocena zamknij nawias okrągły. Linia 2. SELECT Imie przecinek Nazwisko. Linia 3. FROM otwórz nawias kwadratowy Uczniowie podkreślnik i podkreślnik Oceny zamknij nawias kwadratowy. Linia 4. GROUP BY Imie przecinek Nazwisko. Linia 5. PIVOT Przedmiot.

Przeanalizujmy tę składnię. W pierwszej linijce wybieramy wartość na skrzyżowaniu nowych rekordów i kolumn. Musimy zastosować tutaj funkcję agregującąFunkcja agregującafunkcję agregującą. Jest to zabezpieczenie na wypadek, gdybyśmy otrzymali wiele ocen spełniających późniejsze parametry (np. kilka ocen z jednego przedmiotu).

W drugiej linijce rozpoczynamy funkcję SELECT, tutaj należy wybrać kolumny, których wartości staną się rekordami w tabeli wynikowej. W tym przypadku to imiona i nazwiska.

Trzecia linijka wybiera tabelę (lub wiele tabel) zawierającą dane, które chcemy wyświetlić w kwerendzie.

Czwarta linijka zawiera kolumny, według których wynik ma być grupowany. Chcemy, aby oceny zostały pogrupowane według uczniów (obok każdego ucznia mają znajdować się jego oceny), więc zamieszczamy tutaj pola ImieNazwisko. W praktyce najczęściej wpisuje się tutaj te same kolumny, co w poleceniu SELECT.

Ważne!

Należy unikać połączeń pól ImieNazwisko do identyfikowania rekordów, może się bowiem zdarzyć, że dwie osoby nazywają się tak samo. Najlepszym rozwiązaniem jest wykorzystanie indeksów.

Dopiero w ostatniej linijce wybiera się kolumnę, której wartości staną się nazwami rekordów. W tym przypadku jest to oczywiście kolumna Przedmiot.

Ta kwerenda zwróci wynik niemal identyczny jak poprzednia – tym razem pojawią się jednak również imiona uczniów.

Sumowanie kwerendą krzyżową

Kwerendy krzyżowe pozwalają na zastosowanie funkcji agregujących, dzięki czemu przydają się do tworzenia różnego rodzaju podsumowań oraz raportów.

Przeanalizujmy teraz tabelę Zamowienia, przedstawiającą sprzedaż pewnej restauracji.

RMwqJ2bsu3oPw

Tabelę możesz pobrać z załącznika:

RQofjrXnLRA9S

Tabela w postaci pliku tekstowego.

Plik TXT o rozmiarze 389.00 B w języku polskim

Przekształćmy tę tabelę w taki sposób, aby otrzymać informację, ile poszczególni klienci wydali na zamówienia każdej kategorii produktów. Jako nazwy rekordów wykorzystamy wartości Nr_klienta, a jako nazwy kolumn – Kategoria. W polach na skrzyżowaniu Nr_klienta/Kategoria ma się wyświetlić suma cen tych zamówień.

Kod do tej kwerendy prezentuje się następująco:

Linia 1. TRANSFORM SUM otwórz nawias okrągły Cena zamknij nawias okrągły. Linia 2. SELECT otwórz nawias kwadratowy Nr podkreślnik klienta zamknij nawias kwadratowy. Linia 3. FROM Zamowienia. Linia 4. GROUP BY otwórz nawias kwadratowy Nr podkreślnik klienta zamknij nawias kwadratowy. Linia 5. PIVOT Kategoria.

Ponownie omówmy szczegółowe działanie kwerendy krok po kroku.

Przedstawione przykłady dotyczą zamówień z numerami od 1 do 4.

W pierwszym kroku wybierane są pola Cena ze wszystkich rekordów. Odpowiada za to linijka TRANSFORM.

Następnie zamówienia są grupowane według klientów, którzy je złożyli (GROUP BY>). Na tym etapie dane wyglądają następująco:

RkXpLIkEqqmzm

Identyfikator odpowiada numerowi zamówienia. Przy jego pomocy określamy, do jakiej kategorii należy zamówienie (sama cena o tym nie świadczy).

W kolejnym kroku wewnątrz grup cen (pole Cena‑Identyfikator) dochodzi do kolejnego grupowania, tym razem ze względu na kategorię (definiuje to PIVOT).

RrbIQaGSUv4OS

W ostatnim kroku każda podgrupa odpowiadająca danej kategorii zostaje sumowana (SUM(Cena)). Wynikowe rekordy zostają wyświetlone obok kolumn wybranych w SELECT. W tym wypadku jest to kolumna Nr_klienta.

Zwróć uwagę, że kategoria Napoje została usunięta, ponieważ żadne z zamówień od 1 do 4 ich nie zawiera.

R1c3vfxYymWRg

Wywołanie tej kwerendy w całej tabeli dałoby następujący rezultat.

R1Q8VvBHVRd9h

Otrzymujemy w ten sposób sprawne podsumowanie stosunkowo dużej tabeli.

Słownik

funkcja agregująca
funkcja agregująca

funkcja przyjmująca jako argument zbiór lub ciąg wartości, a zwracająca pojedynczą wartość jako wynik; przykładem takich funkcji są średnia, minimum, maximum

normalizacja
normalizacja

modyfikacja bazy tak, aby spełniała reguły jednej z postaci normalnych; pozwala to na usunięcie powtórzeń z bazy, zwiększenie jej spójności oraz przejrzystości; seria e‑materiałów Normalizacja Baz Danych omawia w szczegółach ten proces