47 lines
1.8 KiB
SQL
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
|
|
; |