OnLine Analytical Processing (OLAP) Zapytania SQL 17 kwietnia 2014 Opis pliku z zadaniami Wszystkie zadania na zajęciach będą przekazywane w postaci plików PDF sformatowanych jak ten. Będą się na nie składały różne roadzje zadań, ale za każdym razem będą odpowiednio oznaczone: Zadania do wykonania na zajęciach oznaczone są symbolem nie są one punktowane, ale należy je wykonać w czasie zajęć. Punktowane zadania do wykonania na zajęciach oznaczone są symbolem należy je wykonać na zajęciach i zaprezentować prowadzącemu. Zadania do wykonania w domu oznaczone są symbolem - są one punktowane, należy je dostarczyć w sposób podany przez prowadzącego i w wyznaczonym terminie (zwykle do dwóch dni przed kolejnymi zajęciami). Po zakończeniu zajęć proszę o udzielenie odpowiedzi na kilka pytań zebranych w ankietę dostępną pod adresem http://goo.gl/jqrdko 1
Przegląd rozszerzeń OLAP w MS SQL Server GROUP BY ROLLUP ROLLUP(a, b, c) wygeneruje grupowania (a, b, c), (a, b), (a) oraz rekord agregujący cały zbiór. GROUP BY CUBE CUBE(a, b, c) wygeneruje grupowania (a, b, c), (a, b), (a, c), (b, c), (a), (b), (c) oraz rekord agregujący cały zbiór. GROUP BY GROUPING SETS Działa analogicznie do powyższych, ale daje możliwość jawnego określenia grupowań. GROUPING Pozwala określić dla każdego wiersza wynikowego czy dana kolumna jest zagregowana czy nie. CASE Pozwala sprawdzić wartość kolumny w krotce w oparciu o różne kryteria, z których każde kryterium może zwrócić inną wartość. OVER (PARTITION BY) OVER zazwyczaj stosowana jest z funkcjami szeregującymi i służy do określania zakresu i sposobu w jaki będą nadawane numery wierszy. PARTITION BY pozwala na partycjonowanie elementów ze względu na wartości atrybutów. Funkcje rankingowe (analityczne funkcje szeregujące): RANK () OVER Nadaje kolejne wartości wierszom w ramach zbioru, pod warunkiem, że są one różne ze względu na sposób sortowania w klauzuli OVER. DENSE RANK () OVER Działa analogicznie do RANK() ale jest funkcją ciągłą, więc inkrementuje wartości bez względu na faktyczną pozycję w rankingu (nadaje kolejny numer pozycji). ROW NUMBER () OVER Określa kolejny, unikalny numer wiersza w ramach partycji. NTILE () OVER Dzieli zbiór elementów na przedziały (tzw. kafelki lub płytki). Źródła: http://msdn.microsoft.com http://www.sqlpedia.pl http://mndevnotes.wordpress.com/category/sql-server 2
1 Zapytania SQL wykorzystujące rozszerzenia OLAP max 9p. + 3p. bonus Treść Sformułuj poniższe zapytania w języku SQL wykorzystując rozszerzenia OLAP: 1. Wyświetl liczbę odsłuchanych utworów w podziale na dni, miesiące i lata w jednym raporcie. 2. Wyświetl tę samą informację, ale sformatuj tak wynik, aby informacje sumaryczne dotyczące miesięcy i lat były czytelnie oznaczone. 3. Przygotuj raport, który zawiera liczbę odsłuchanych utworów w poszczególnych latach i miesiącach (bez uwzględnienia roku danego miesiąca). 4. Wyświetl liczbę odsłuchań poszczególnych utworów zespołu Queen i łączną liczbę odsłuchań. 5. Wyświetl roczną liczbę odsłuchań każdego artysty poczynając od 2008 roku, zagregowaną liczbę odsłuchań artysty od 2008 roku, zagregowaną liczbę odsłuchań w poszczególnych latach (od 2008). Dla każdego wiersza wynikowego wyświetl informację czy dana kolumna (rok, artysta) jest zagregowana (posiada wartość NULL) czy nie. 6. Wyświetl liczbę odsłuchań dla każdego artysty oraz informację o tym czy jest to Top artist czy nie, gdzie informację tą warunkuje liczba odsłuchań większa niż 100. 7. Wyświetl liczbę odsłuchań każdego utworu zespołu Queen w kolejnych miesiącach 2010 roku oraz ich skumulowaną liczbę. 8. Wyświetl ranking utworów (z kolumną zawierającą rangę utworu). Liczbę odsłuchań zaokrąglij do całych setek wykorzystując funkcję ROUND(%value%,-2). Zadanie wykonujemy w parach. 9. Wyświetl ranking utworów podobnie jak powyżej ale zastosuj sprawiedliwy ranking, który zawsze przydzieli 1, 2, 3, itd. miejsce. Zadanie wykonujemy w parach. 10. Ponownie wyświetl ranking utworów podobnie jak powyżej ale teraz zastosuj niesprawiedliwy ranking, który przydziela po prostu kolejne miejsca, nawet jeśli zaokrąglona liczba odsłuchań jest równa. Zadanie wykonujemy w parach. 11. Wyświetl dla każdego artysty pięć najpopularniejszych jego utworów. Zadanie wykonujemy w parach. 3
12. (Dla chętnych:) Wyświetl wszystkich użytkowników, którzy słuchali wszystkie top 3 piosenki zespołu Queen (podpowiedź: dzielenie relacyjne). Punktacja za zadania: 1p. za łączne wykonanie wszystkich zadań od 1 do 4. 1p. za łączne wykonanie wszystkich zadań od 5 do 6. 2p. za wykonanie zadania 7. 2p. za łączne wykonanie wszystkich zadań od 8 do 10 (w parach). 3p. za wykonanie zadania 11 (w parach). 3p. za wykonanie dodatkowego zadania 12. 4
2 Konkurs zapytań SQL Treść Konkurs przebiega pomiędzy dwoma grupami studentów. Studenci do grup wybierani są losowo. Konkurs składa się z kilku rund. Każda runda składa się dwóch etapów. W pierwszym etapie grupy wymyślają zadanie dla przeciwnej grupy. Zadaniem jest sformułowanie zapytania w języku SQL. W drugim etapie grupy rozwiązują zadania. Grupa odpowiadająca zdobywa punkt, gdy rozwiąże poprawnie zadanie. Jeżeli grupa zadająca pytanie nie zna na nie odpowiedzi lub odpowiedź ta jest błędna, to także grupa odpowiadająca zdobywa punkt. 5
3 Więcej zapytań SQL z rozszerzeniami OLAP 4p. Treść Sformułuj poniższe zapytania w języku SQL wykorzystując rozszerzenia OLAP: 1. Wyświetl liczbę odsłuchanych utworów w podziale na dni, miesiące i lata. Uwzględnij informacje o liczbie odsłuchań dla każdego dnia niezależnie od miesiąca, każdego dnia niezależnie od miesiąca i roku, każdego miesiąca niezależnie od roku i dnia oraz każdego miesiąca niezależnie od roku. (1p.) 2. Wyświetl ranking utworów dla zespołu Queen zamieszczjąc dodatkowo informację o podziale krotek na 4 grupy (kafelki, płytki). (1p.) 3. Dla każdego roku pomiędzy 2007 a 2010 wyświetl 5 największych hitów (piosenek), wraz z ich rankingiem. Dodatkowo w tym samym raporcie wylistuj piosenki, które znalazły się w zestawieniach dla poszczególnych lat, posortowane wg. liczby odsłuchań. (2p.) Uwagi: Do wykonania zadania wykorzystaj rozszerzenia OLAP dla MS SQL, które poznałeś/aś na wykładzie oraz zajęciach laboratoryjnych. Zapytania SQL należy przesłać prowadzącemu najpóźniej 2 dni przed kolejnymi zajęciami (do wtorku do północy) w pliku w formacie NR INDEKSU.sql, tak aby prowadzący mógł łatwo otworzyć i wykonać zapytania. W pliku proszę zamieścić komentarze z imieniem, nazwiskiem, numerem indeksu oraz numerami poszczególnych zapytań (komentarze poprzedza się podwójnym myślnikiem --). 6