This commit is contained in:
Luca Conte 2023-10-02 13:50:10 +02:00
parent 3c62b45941
commit c021cc1fbc
1 changed files with 80 additions and 0 deletions

80
a1.3/a1.3.sql Normal file
View File

@ -0,0 +1,80 @@
-- DBS2.1.3.a::
-- Berechnen Sie die Summe aller Budgets (SUMME) sowie das minimale (MIN) und
-- maximale Budget (MAX) für alle Kinofilme (Type=C) des Jahres 1989, bei denen das Budget
-- in USD angegeben ist. (eine Anfrage!). Hinweis: verwenden Sie ... like '%USD%' ...
-- Erwartete Spalten: summe, min, max
SELECT SUM(b.BUDGET), MIN(b.BUDGET), MAX(b.BUDGET)
FROM moviedb.MOVIE m
JOIN moviedb.BUDGET b ON (m.ID = b.MOVIE)
WHERE m.TYPE='C' AND m.YEAR=1989 AND b.CURRENCY_SYMBOL LIKE '%USD%'
GROUP BY YEAR;
-- DBS2.1.3.b::
-- Ermitteln Sie alle Genres, die in Kinofilmen aus dem Jahr 1960 eingesetzt wurden zusammen mit der Anzahl von
-- Kinofilmen (Type C), in denen sie in dem Jahr verwendet wurden. (Jedes Genre sollte nur einmal auftauchen!).
-- Erwartete Spalten: genre, anzahl
SELECT g.GENRE, COUNT(m.ID) AS ANZAHL
FROM moviedb.MOVIE m
JOIN moviedb.GENRE g ON (g.MOVIE = m.ID)
WHERE m.YEAR = 1960 AND m.TYPE = 'C'
GROUP BY g.GENRE;
-- DBS2.1.3.c::
-- Ermitteln Sie alle Genres, die in Kinofilmen aus dem Jahr 1960 eingesetzt wurden zusammen mit der Anzahl von
-- Kinofilmen (Type C), in denen sie in dem Jahr verwendet wurden. (Jedes Genre sollte nur einmal auftauchen!).
-- Schränken Sie die Abfrage so ein, dass nur Genres aufgelistet werden, zu denen es in 1960 mindestens
-- 100 Kinofilme gab.
-- Erwartete Spalten: genre, anzahl
SELECT g.GENRE, COUNT(m.ID) AS ANZAHL
FROM moviedb.MOVIE m
JOIN moviedb.GENRE g ON (g.MOVIE = m.ID)
WHERE m.YEAR = 1960 AND m.TYPE = 'C'
GROUP BY g.GENRE
HAVING COUNT(m.ID) >= 100;
-- DBS2.1.3.d::
-- Ermitteln Sie alle Genres, die in Kinofilmen aus dem Jahr 1960 eingesetzt wurden zusammen mit der Anzahl von
-- Kinofilmen (Type C), in denen sie in dem Jahr verwendet wurden. (Jedes Genre sollte nur einmal auftauchen!).
-- Schränken Sie die Abfrage so ein, dass nur Genres aufgelistet werden, zu denen es in 1960 mindestens
-- 100 Kinofilme gab.
-- Sortieren Sie das Ergebnis nach Häufigkeit absteigend.
-- Erwartete Spalten: genre, anzahl
SELECT g.GENRE, COUNT(m.ID) AS ANZAHL
FROM moviedb.MOVIE m
JOIN moviedb.GENRE g ON (g.MOVIE = m.ID)
WHERE m.YEAR = 1960 AND m.TYPE = 'C'
GROUP BY g.GENRE
HAVING COUNT(m.ID) >= 100
ORDER BY COUNT(m.ID) DESC;
-- DBS2.1.3.e::
-- Finden Sie ID und Titel aller Kinofilme (Type=C), die mind. einen Nachfolger haben, und die mindestens einmal
-- parodiert wurden. Ein Film hat einen Nachfolger, wenn die ID in der Tabelle FOLLOWS in der Spalte MOVIE
-- verwendet wird. Ein Film wurde parodiert, wenn die ID in der Tabelle SPOOFS in der Spalte SPOOFED verwendet
-- wird. Ein Film soll nur maximal einmal im Ergebnis sein, auch wenn er mehrere Nachfolger und Parodien hat.
-- Erwartete Spalten: id, title
SELECT DISTINCT m.ID, m.TITLE
FROM moviedb.MOVIE m
JOIN moviedb.FOLLOWS f ON (m.ID = f.MOVIE)
JOIN moviedb.SPOOFS s ON (m.ID = s.SPOOFED)
WHERE m.TYPE = 'C';
-- DBS2.1.3.f::
-- Finden Sie ID und Titel aller Kinofilme, die entweder mind. einen Nachfolger haben, oder mindestens einmal
-- parodiert wurden, für die aber nicht beides zutrifft.
-- Ein Film soll maximal einmal im Ergebnis sein.
-- Hinweis: Es gibt unterschiedliche Lösungsmöglichkeiten. Denken Sie über Full Outer Joins nach, oder alternativ
-- über Mengenoperationen.
-- Erwartete Spalten: id, title
SELECT DISTINCT m.ID, m.TITLE
FROM moviedb.MOVIE m
LEFT JOIN moviedb.FOLLOWS f ON (m.ID = f.MOVIE)
LEFT JOIN moviedb.SPOOFS s ON (m.ID = s.SPOOFED)
WHERE m.TYPE = 'C' AND (f.MOVIE IS NULL AND s.SPOOFED IS NOT NULL OR f.MOVIE IS NOT NULL AND s.SPOOFED IS NULL);