USE project;

/*
---------------------------------- 1 ----------------------------------
Geben Sie mit SQL alle Menüs mit den darin enthaltenen Produkten menschenlesbar
als eine Art Speisekarte aus.
-----------------------------------------------------------------------
*/
SELECT Menuname, GROUP_CONCAT(Produktname SEPARATOR ', ') AS 'Produkte'
FROM Menu
         JOIN Menucontent M on Menu.MenuID = M.MenuID
         JOIN Produkt P on M.ProduktID = P.ProduktID
GROUP BY Menuname;


/*
---------------------------------- 2 ----------------------------------
Erweitern Sie die Ausgabe aus der vorherigen Abfrage um hilfreiche Informationen
bezüglich der Gesamtnährwerte dieser Menüs.
-----------------------------------------------------------------------
*/
SELECT Menuname,
       GROUP_CONCAT(Produktname SEPARATOR ', ') AS 'Produkte',
       SUM(Fett)                                AS 'Fett',
       SUM(Kohlenhydrate)                       AS 'Kohlenhydrate',
       SUM(Eiweiss)                             AS 'Eiweiss',
       SUM(Brennwert)                           AS 'Brennwert'
FROM Menu
         JOIN Menucontent M on Menu.MenuID = M.MenuID
         JOIN Produkt P on M.ProduktID = P.ProduktID
         JOIN Naehrwerte N on P.ProduktID = N.ProduktID
GROUP BY Menuname;


/*
---------------------------------- 3 ----------------------------------
Geben sie mit SQL alle Produkte mit für Kundinnen und Kunden relevanten Informationen für
eine bestimmte Person aus (betreffend Allergenen, Unverträglichkeiten, vegetarisch, etc.).
-----------------------------------------------------------------------
TODO Vegetarisch? Wo finden wir Informationen zu den Produkten?
*/
SELECT Personenvorname,
       Personenname,
       CONCAT_WS(', ', GROUP_CONCAT(DISTINCT Allergenbezeichnung SEPARATOR ', '),
                 GROUP_CONCAT(DISTINCT Zusatzstoffbezeichnung SEPARATOR ', '))
FROM Person
         JOIN Allergie A on Person.PersonID = A.PersonID
         JOIN Allergen A2 on A.AllergenID = A2.AllergenID
         JOIN Zusatzstoffunvertraeglichkeit Z on Person.PersonID = Z.PersonID
         JOIN Zusatzstoff Z2 on Z2.E_Nummer = Z.E_Nummer
GROUP BY Personenvorname, Personenname;


/*
---------------------------------- 4 ----------------------------------
Sortieren Sie alle enthaltenen Produkte absteigend nach Anzahl der enthaltenen Zusatzstoffe.
-----------------------------------------------------------------------
*/
SELECT Produktname,
       LENGTH(GROUP_CONCAT(E_Nummer)) - LENGTH(REPLACE(GROUP_CONCAT(E_Nummer), ',', '')) + 1 AS 'Anzahl Zusatzstoffe'
FROM Produkt
         JOIN enthaeltZusatzstoff eZ on Produkt.ProduktID = eZ.ProduktID
GROUP BY Produktname
ORDER BY LENGTH(GROUP_CONCAT(E_Nummer)) - LENGTH(REPLACE(GROUP_CONCAT(E_Nummer), ',', '')) + 1 DESC;


/*
---------------------------------- 5 ----------------------------------
Sortieren Sie alle [in der Datenbank (anm. d. St.)] enthaltenen Produkte aufsteigend nach Kalorienanzahl in der Portion, die verkauft wird.
Hinweis: Produkte ohne Brennwert werden nicht angezeigt
-----------------------------------------------------------------------
*/
SELECT Produktname,
       ROUND(Brennwert * (M.Menge / 100), 1) AS Brennwert,
       M.Menge,
       M.Einheit
FROM Produkt
    JOIN Naehrwerte N on Produkt.ProduktID = N.ProduktID
    JOIN Menge M on Produkt.ProduktID = M.ProduktID
ORDER BY Brennwert;

/*
---------------------------------- 6 ----------------------------------
Geben Sie eine SQL Anfrage an, die alle Produkte ausgibt, die eine bestimmte Anzahl von Emulgatoren enthalten.
    a. Keine Emulgatoren
    b. 1 Emulgator
    c. 2 Emulgatoren
    d. Mehr
-----------------------------------------------------------------------
*/
