<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<game format-version="2" db-system="sqlite" db-system-min-version="3.37.0">
    <head>
        <title>SQL-Supermarkt</title>
        <teaser>Bereit, zusammen den Supermarkt zu erkunden und spannende Aufgaben zu l&#xF6;sen?</teaser>
        <copyright>&#xA9; Navneet</copyright>
    </head>
    <scenes>
        <text-scene>
            <text>Hallo, ich bin Max. Sch&#xF6;n, dass du hier bist! Bereit, zusammen den Supermarkt zu erkunden und spannende Aufgaben zu l&#xF6;sen?</text>
        </text-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Max muss heute dringend einkaufen gehen und er ist auf der Suche nach frischem Obst. Finde alle Produkte in der Kategorie &#x22;Obst&#x22;. Gib nur die Produktnamen aus.</text>
            <sql-solution>SELECT Produktname
FROM Produkte
WHERE Kategorie = &#x27;Obst&#x27;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Max m&#xF6;chte den Gesamtpreis aller Milchprodukte herausfinden. Kannst du ihm helfen, indem du alle Milchprodukte identifizierst und ihre Preise addierst? Runde das Ergebnis auf zwei Nachkommastellen.</text>
            <sql-solution>SELECT ROUND(SUM(Preis), 2) AS Gesamtpreis_Milchprodukte
FROM Produkte
WHERE Kategorie = &#x27;Milchprodukte&#x27;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Max m&#xF6;chte den durchschnittlichen Preis aller Produkte herausfinden. Kannst du ihm dabei helfen? Runde das Ergebnis auf zwei Nachkommastellen.</text>
            <sql-solution>SELECT ROUND(AVG(Preis), 2) AS Durchschnittspreis
FROM Produkte</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Max m&#xF6;chte den Namen und das `Lebensalter` aller Kundinnen im Supermarkt finden. Gib die Spalten `Name` und `Lebensalter` aus der Tabelle `Kunden` aus und filtere nach `Geschlecht = &#x27;weiblich&#x27;`.</text>
            <sql-solution>SELECT Name, Lebensalter
FROM Kunden
WHERE Geschlecht = &#x27;weiblich&#x27;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Max m&#xF6;chte wissen, welches das teuerste Produkt im Supermarkt ist. Kannst du ihm helfen, dieses zu finden? Gib den Produktnamen und den Preis aus.</text>
            <sql-solution>SELECT Produktname, Preis
FROM Produkte
ORDER BY Preis DESC
LIMIT 1</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Max m&#xF6;chte wissen, wie viele Bananen insgesamt verkauft wurden. Ermittle die verkaufte St&#xFC;ckzahl anhand der Mengen in `Transaktionen`. Die Produktnamen findest du in `Produkte`; beide Tabellen sind &#xFC;ber `Produkt_ID` verbunden. Gib nur die Gesamtmenge aus, oder 0, falls keine Bananen verkauft wurden.</text>
            <sql-solution>SELECT COALESCE(SUM(Transaktionen.Menge), 0) AS Verkaufte_Bananen
FROM Transaktionen
JOIN Produkte ON Transaktionen.Produkt_ID = Produkte.Produkt_ID
WHERE Produkte.Produktname = &#x27;Bananen&#x27;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Mit `JOIN` verbindest du Tabellen. `JOIN Produkte ON Transaktionen.Produkt_ID = Produkte.Produkt_ID` ordnet jeder Transaktion das passende Produkt zu. Filtere danach mit `WHERE` nach dem Produktnamen.</text-hint>
                <text-hint>`SUM(Transaktionen.Menge)` addiert die verkauften St&#xFC;ckzahlen. `COUNT(*)` w&#xFC;rde dagegen die Transaktionen z&#xE4;hlen.</text-hint>
                <text-hint>Wenn keine passenden Transaktionen vorhanden sind, liefert `SUM` den Wert `NULL`. `COALESCE(SUM(Transaktionen.Menge), 0)` ersetzt diesen durch 0.</text-hint>
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Lisa war einkaufen. Max m&#xF6;chte ihre Eink&#xE4;ufe nachvollziehen. Gib f&#xFC;r jede Transaktion von Lisa den Produktnamen und die zugeh&#xF6;rige Menge aus. Fasse mehrere Transaktionen desselben Produkts nicht zusammen.</text>
            <sql-solution>SELECT Produkte.Produktname, Transaktionen.Menge
FROM Transaktionen
JOIN Produkte ON Transaktionen.Produkt_ID = Produkte.Produkt_ID
JOIN Kunden ON Transaktionen.Kunden_ID = Kunden.Kunden_ID
WHERE Kunden.Name = &#x27;Lisa&#x27;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Verbinde `Transaktionen` mit `Produkte` &#xFC;ber `Produkt_ID` und mit `Kunden` &#xFC;ber `Kunden_ID`. So stehen `Produktname`, `Menge` und Kundenname in derselben Abfrage zur Verf&#xFC;gung.</text-hint>
                <text-hint>Die zweite Verbindung lautet `JOIN Kunden ON Transaktionen.Kunden_ID = Kunden.Kunden_ID`. Filtere mit `WHERE Kunden.Name = &#x27;Lisa&#x27;` und w&#xE4;hle `Produkte.Produktname` sowie `Transaktionen.Menge` aus.</text-hint>
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Max m&#xF6;chte die Anzahl der Transaktionen pro Tag im Supermarkt herausfinden. Gib f&#xFC;r jedes in `Transaktionen` vorkommende Datum eine Zeile mit dem Datum und der Anzahl der Transaktionen aus.</text>
            <sql-solution>SELECT Datum, COUNT(*) AS Anzahl_Transaktionen
FROM Transaktionen
GROUP BY Datum</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>`GROUP BY Datum` fasst Transaktionen mit demselben `Datum` zu einer Gruppe zusammen. Jede Gruppe ergibt eine Ergebniszeile.</text-hint>
                <text-hint>W&#xE4;hle `Datum` und `COUNT(*)` aus. `COUNT(*)` z&#xE4;hlt die Transaktionen innerhalb jeder Gruppe; `SUM(Menge)` w&#xFC;rde stattdessen die verkauften St&#xFC;cke addieren.</text-hint>
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Max m&#xF6;chte wissen, wie viele St&#xFC;ck Lisa insgesamt gekauft hat. Addiere die Mengen aller ihrer Transaktionen und gib nur die Gesamtst&#xFC;ckzahl aus. Gesucht ist die Summe der Mengen, nicht die Anzahl verschiedener Produkte.</text>
            <sql-solution>SELECT SUM(Transaktionen.Menge) AS Gesamtstueckzahl
FROM Transaktionen
JOIN Kunden ON Transaktionen.Kunden_ID = Kunden.Kunden_ID
WHERE Kunden.Name = &#x27;Lisa&#x27;</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
                <text-hint>Verbinde `Transaktionen` und `Kunden` &#xFC;ber `Kunden_ID` und filtere nach `Kunden.Name = &#x27;Lisa&#x27;`, wie bei der Auflistung ihrer Eink&#xE4;ufe.</text-hint>
                <text-hint>`SUM(Transaktionen.Menge)` liefert die insgesamt gekaufte St&#xFC;ckzahl. `COUNT(*)` z&#xE4;hlt Transaktionen, `COUNT(DISTINCT Produkt_ID)` verschiedene Produkte.</text-hint>
            </hints>
        </select-scene>
        <select-scene is-row-order-relevant="false" is-col-order-relevant="false" are-col-names-relevant="false">
            <text>Max m&#xF6;chte das letzte Einkaufsdatum von Lisa wissen. Kannst du ihm dabei helfen?</text>
            <sql-solution>SELECT MAX(Datum) AS Letztes_Einkaufsdatum
FROM Transaktionen
WHERE Kunden_ID = (SELECT Kunden_ID FROM Kunden
WHERE Name = &#x27;Lisa&#x27;)</sql-solution>
            <sql-placeholder></sql-placeholder>
            <hints>
                <expected-result-hint />
            </hints>
        </select-scene>
        <text-scene>
            <text>Herzlichen Gl&#xFC;ckwunsch, du hast alle zehn Aufgaben im SQL-Supermarkt gel&#xF6;st! Du hast Produkte gefiltert, Preise und Mengen berechnet, Einkaufsdaten mit `JOIN` verkn&#xFC;pft und Transaktionen nach Datum gruppiert. Vielen Dank f&#xFC;r deine Teilnahme und bis zum n&#xE4;chsten Einkaufsabenteuer!</text>
        </text-scene>
    </scenes>
    <initial-sql-script>BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS &#x22;Produkte&#x22; (
&#x9;&#x22;Produkt_ID&#x22;&#x9;INTEGER,
&#x9;&#x22;Produktname&#x22;&#x9;TEXT,
&#x9;&#x22;Kategorie&#x22;&#x9;TEXT,
&#x9;&#x22;Preis&#x22;&#x9;REAL
);
CREATE TABLE IF NOT EXISTS &#x22;Kunden&#x22; (
&#x9;&#x22;Kunden_ID&#x22;&#x9;INTEGER,
&#x9;&#x22;Name&#x22;&#x9;TEXT,
&#x9;&#x22;Lebensalter&#x22;&#x9;INTEGER,
&#x9;&#x22;Geschlecht&#x22;&#x9;TEXT
);
CREATE TABLE IF NOT EXISTS &#x22;Transaktionen&#x22; (
&#x9;&#x22;Transaktions_ID&#x22;&#x9;INTEGER,
&#x9;&#x22;Kunden_ID&#x22;&#x9;INTEGER,
&#x9;&#x22;Produkt_ID&#x22;&#x9;INTEGER,
&#x9;&#x22;Menge&#x22;&#x9;INTEGER,
&#x9;&#x22;Datum&#x22;&#x9;TEXT
);
INSERT INTO &#x22;Produkte&#x22; VALUES (1,&#x27;&#xC4;pfel&#x27;,&#x27;Obst&#x27;,2.50);
INSERT INTO &#x22;Produkte&#x22; VALUES (2,&#x27;Bananen&#x27;,&#x27;Obst&#x27;,1.80);
INSERT INTO &#x22;Produkte&#x22; VALUES (3,&#x27;Milch&#x27;,&#x27;Milchprodukte&#x27;,1.20);
INSERT INTO &#x22;Produkte&#x22; VALUES (4,&#x27;Brot&#x27;,&#x27;Backwaren&#x27;,2.00);
INSERT INTO &#x22;Produkte&#x22; VALUES (5,&#x27;Tomaten&#x27;,&#x27;Gem&#xFC;se&#x27;,3.00);
INSERT INTO &#x22;Produkte&#x22; VALUES (6,&#x27;Jogurt&#x27;,&#x27;Milchprodukte&#x27;,0.90);
INSERT INTO &#x22;Produkte&#x22; VALUES (7,&#x27;Kartoffeln&#x27;,&#x27;Gem&#xFC;se&#x27;,1.50);
INSERT INTO &#x22;Produkte&#x22; VALUES (8,&#x27;H&#xE4;hnchenbrust&#x27;,&#x27;Fleisch&#x27;,5.50);
INSERT INTO &#x22;Produkte&#x22; VALUES (9,&#x27;Orangensaft&#x27;,&#x27;Getr&#xE4;nke&#x27;,2.20);
INSERT INTO &#x22;Produkte&#x22; VALUES (10,&#x27;Schokolade&#x27;,&#x27;S&#xFC;&#xDF;waren&#x27;,1.80);
INSERT INTO &#x22;Kunden&#x22; VALUES (1,&#x27;Lisa&#x27;,32,&#x27;weiblich&#x27;);
INSERT INTO &#x22;Kunden&#x22; VALUES (2,&#x27;Max&#x27;,45,&#x27;m&#xE4;nnlich&#x27;);
INSERT INTO &#x22;Kunden&#x22; VALUES (3,&#x27;Anna&#x27;,28,&#x27;weiblich&#x27;);
INSERT INTO &#x22;Kunden&#x22; VALUES (4,&#x27;Tim&#x27;,40,&#x27;m&#xE4;nnlich&#x27;);
INSERT INTO &#x22;Kunden&#x22; VALUES (5,&#x27;Sarah&#x27;,36,&#x27;weiblich&#x27;);
INSERT INTO &#x22;Kunden&#x22; VALUES (6,&#x27;Tom&#x27;,25,&#x27;m&#xE4;nnlich&#x27;);
INSERT INTO &#x22;Kunden&#x22; VALUES (7,&#x27;Luca&#x27;,36,&#x27;m&#xE4;nnlich&#x27;);
INSERT INTO &#x22;Transaktionen&#x22; VALUES (1,1,1,2,&#x27;2024-04-27&#x27;);
INSERT INTO &#x22;Transaktionen&#x22; VALUES (2,1,3,1,&#x27;2024-04-27&#x27;);
INSERT INTO &#x22;Transaktionen&#x22; VALUES (3,2,5,1,&#x27;2024-04-27&#x27;);
INSERT INTO &#x22;Transaktionen&#x22; VALUES (4,3,6,3,&#x27;2024-04-28&#x27;);
INSERT INTO &#x22;Transaktionen&#x22; VALUES (5,4,8,2,&#x27;2024-04-28&#x27;);
INSERT INTO &#x22;Transaktionen&#x22; VALUES (6,5,10,1,&#x27;2024-04-29&#x27;);
INSERT INTO &#x22;Transaktionen&#x22; VALUES (7,1,4,3,&#x27;2024-04-30&#x27;);
INSERT INTO &#x22;Transaktionen&#x22; VALUES (8,6,7,4,&#x27;2024-05-01&#x27;);
INSERT INTO &#x22;Transaktionen&#x22; VALUES (9,7,9,2,&#x27;2024-04-29&#x27;);
COMMIT;</initial-sql-script>
</game>
