DROP VIEW IF EXISTS v_Film; CREATE VIEW v_Film AS SELECT Film.*, GROUP_CONCAT(CONCAT_WS(' ', Schauspieler.Vorname, Schauspieler.Nachname) SEPARATOR ', ') AS SchauspielerListe FROM Film LEFT JOIN nm_Film_Schauspieler ON Film.ID = nm_Film_Schauspieler.fk_Film_ID LEFT JOIN Schauspieler ON nm_Film_Schauspieler.fk_Schauspieler_ID = Schauspieler.ID GROUP BY Film.ID ORDER BY Film.Name ASC, Film.Bewertung DESC ; DROP VIEW IF EXISTS v_Saal; CREATE VIEW v_Saal AS SELECT Saal.ID, Saal.Name, Saal.Beschreibung, COUNT(Sitzplatz.ID) Sitzanzahl FROM Saal LEFT JOIN Sitzplatz ON Saal.ID = Sitzplatz.fk_Saal_ID GROUP BY Saal.ID, Saal.Name, Saal.Beschreibung ORDER BY Saal.Name ; DROP VIEW IF EXISTS v_Vorstellung; CREATE VIEW v_Vorstellung AS SELECT Vorstellung.ID, Vorstellung.Beginn, DATE_ADD(Vorstellung.Beginn, INTERVAL v_Film.Spieldauer MINUTE) Ende, v_Film.Name Filmname, v_Film.Beschreibung, v_Film.Bewertung, v_Film.SchauspielerListe, v_Saal.Name Saalname, COUNT(DISTINCT Reservierung.ID) Reservierungen, COUNT(Sitzplatz.ID) Platzreservierungen, CAST(COUNT(Sitzplatz.ID)/v_Saal.Sitzanzahl AS DECIMAL(5, 4)) Ausbuchung, COALESCE(SUM(Sitzplatz.Preis), 0) `Einnahmen` FROM Vorstellung JOIN v_Film ON Vorstellung.fk_Film_ID=v_Film.ID JOIN v_Saal ON Vorstellung.fk_Saal_ID = v_Saal.ID LEFT JOIN Reservierung ON Vorstellung.ID = Reservierung.fk_Vorstellung_ID LEFT JOIN nm_Reservierung_Sitzplatz ON Reservierung.ID = nm_Reservierung_Sitzplatz.fk_Reservierung_ID LEFT JOIN Sitzplatz ON nm_Reservierung_Sitzplatz.fk_Sitzplatz_ID = Sitzplatz.ID GROUP BY Vorstellung.Beginn, v_Film.Spieldauer, v_Film.Name, v_Film.Beschreibung, v_Film.Bewertung, v_Film.SchauspielerListe, v_Saal.Name ORDER BY Vorstellung.Beginn ASC, v_Saal.Name ASC ;