Files
mysql-db-vorlesung/02-views.sql
Sebastian Seedorf ff6962de52 initial commit
2020-12-06 12:40:52 +01:00

47 lines
1.8 KiB
SQL

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
;