``# SQL Rallye Short-Link zur SQL Rallye https://t1p.de/ozjpd ![image](https://hackmd.io/_uploads/HySYIzx4a.png) --- ### Umgebung für die SQL-Rallye #### In dieser Variante verwenden wir den Raspberry PI. Das ISO-Image könnt ihr euch über diesen NextCloud Link runterladen. ![SQL_Rallye_PI_SZENARIO_v_20](https://hackmd.io/_uploads/SJD5oMlYT.png) --- ## Aufgaben Verschafft euch einen Überblick Analysiert die Datenbank - welche Attribute haben die einzelnen Tabellen? --- ### Datenbankmodell ![image](https://hackmd.io/_uploads/S1SW5fgEp.png) --- - Wieviele Kunden befinden sich in der Datenbank? - Wieviele Rechnungen wurden bislang geschrieben? - Wieviele Produkte sind in der Artikel Datenbank? - Wieviele Kunden haben ein Geburtsdatum angegeben - Welches Bundesland hat wieviele Kunden? - Wieviele Kunden haben eine Email-Adresse? Wie hoch ist die Quote? - Zeige eine Übersicht über die Gender-Code Verteilung des gesamten Kundenstamms! - Da es sich um eine Schuhdatenbank handelt und jeder Schuh mit jeder Schuhgröße einen Eintrag hat - möchten wir wissen; - wie viele Schuhprodukte es gibt - die Schuhgröße soll nicht berücksichtigt werden.) - Wieviele unterschiedliche Hersteller sind in der Datenbank? - Wer ist der älteste Kunde? - Wer ist der jüngste Kunde? - Zeige alle Rechnungsnummern zu einem Kunden? - Welcher Schuh wurde am häufigsten verkauft? Bemerkung - Bei der Suche sind die Kriterien, das Modell und die Schuhgröße - Welches Modell wurde wie oft verkauft? Die Schuhgröße soll nicht berücksichtigt werden. Welche Rechnung hat die meisten Rechnungspositionen? Selektiere die teuerste Rechnung? Selektiere die teuerste Rechnung und gebe auch den Nachnamen aus. Wieviele Kunden haben keine Rechnung bislang generiert? Wieviele Kunden haben den Gender-Code d=divers, w=weiblich, m=männlich. Verteilung nach Bundesland Ermittelt den durchschnittlichen Rechnungsbetrag der erzeugten Rechnungen. Von welcher Firma wurden die meisten Schuhe verkauft? --- #### Wieviele Kunden befinden sich in der Datenbank? ```sql SELECT ... ``` #### Wieviele Rechnungen wurden bislang geschrieben? ```sql SELECT .... ``` #### Wieviele Produkte sind in der Artikel Datenbank? ```sql SELECT .... ``` #### Wieviele Kunden haben ein Geburtsdatum angegeben ```sql Select Count(Kdnr) from Kunden k where k.Geburtsdatum != '' ``` #### Welches Bundesland hat wieviele Kunden? ```sql SELECT .... ``` #### Wieviele Kunden haben eine Email-Adresse? Wie hoch ist die Quote? ```sql Select Count(k.KdNr) * 100 / (Select Count(k.KdNr) as Anzahl_Kunden FROM Kunden k) FROM Kunden k where k.EMail != '' SELECT (CAST(COUNT(*) AS FLOAT) / (SELECT COUNT(*) FROM Kunden)) * 100 AS QuoteKundenMitEmail FROM Kunden WHERE EMail <> ''; ``` Hallo #### Zeige eine Übersicht über die Gender-Code Verteilung des gesamten Kundenstamms! ```sql SELECT ArtName, COUNT(*) FROM Artikel GROUP BY ArtName; SELECT COUNT(CASE WHEN k.Gender = 'm' THEN 1 END) AS Männlich , COUNT(CASE WHEN k.Gender = 'w' THEN 1 END) AS Weiblich , COUNT(CASE WHEN k.Gender = 'd' THEN 1 END) AS Divers FROM Kunden AS k GROUP BY k.Gender Select k.Gender, COUNT(KdNr) from Kunden k GROUP by k.Gender ``` #### Da es sich um eine Schuhdatenbank handelt und jeder Schuh mit jeder Schuhgröße einen Eintrag hat - möchten wir wissen wieviele Schuh-Produkte es gibt - die Schuhgröße soll nicht berücksichtigt werden. ```sql SELECT ``` #### Wieviele unterschiedliche Hersteller sind in der Datenbank? ```sql SELECT COUNT(DISTINCT ArtHersteller) AS VerschiedeneHersteller FROM Artikel; ``` #### Wer ist der älteste Kunde? ```sql SELECT * FROM Kunden WHERE Geburtsdatum <> "" ORDER BY STR_TO_DATE(Geburtsdatum, '%d.%m.%Y') ASC LIMIT 1; Select k.KdNr,k.Anrede,k.Vorname,k.Nachname, min(k.Geburtsdatum) from Kunden k where k.Geburtsdatum != '' ORDER by k.Geburtsdatum DESC LIMIT 1; ``` Select min(STR_TO_DATE(Kunden.Geburtsdatum, '%d.%m.%Y')) as Geburtsdatum from Kunden where Kunden.Geburtsdatum not like ""; #### Wer ist der jüngste Kunde? ```sql ``` #### Zeige mir alle Rechnungs-Nummern zu einem Kunden? ```sql ``` #### Welcher Schuh wurde am häufigsten verkauft? **Bemerkung - Bei der Suche sind die Kriterien das Modell und die Schuhgröße.** ```sql ``` #### Welches Modell wurde wie oft verkauft? Die Schuhgröße soll nicht berücksichtigt ```sql SELECT ``` #### Welche Rechnung hat die meisten Rechnungs-Positionen? ```sql Select ; ``` #### Selektiere die teuerste Rechnung? ```sql Select ; SELECT k.Nachname, k.Vorname, r.RechNr, SUM(a.ArtPreis) AS Summe FROM Rechnung AS r LEFT JOIN Artikelbestellung AS ab ON r.RechNr = ab.RechNr LEFT JOIN Artikel AS a ON ab.ArtikelNr = a.ArtNr LEFT JOIN Kunden AS k ON r.KdNr = k.KdNr GROUP BY r.RechNr ORDER BY Summe DESC Select ab.RechNr, sum(a.ArtPreis) as summe from Artikelbestellung ab inner join Artikel a on a.ArtNr = ab.ArtikelNr GROUP by ab.RechNr ORDER by summe DESC LIMIT 1; ``` :) :) #### Selektiere die teuerste Rechnung und gebe auch den Nachnamen aus. ```sql Select ; ``` #### Wieviele Kunden haben keine Rechnung bislang generiert? ```sql SELECT ; ``` #### Wieviele Kunden haben den Gender-Code d=divers, w=weiblich, m=männ ich. Verteilung nach Bundesland ```sql select ; ``` #### Ermittelt den durchschnittlichen Rechnugsbetrag. ```sql SELECT ; ``` #### Von welcher Firma wurden die meisten Schuhe verkauft? ```sql SELECT ; ```