In diesem Quiz arbeiten Sie mit Daten von Netflix (Quelle ), die zeigen, was beim Streaminganbieter wie oft geschaut wird.
Datenbankschema und Primärschlüssel
Typischerweise stellt man Datenbanken in einem sogenannten Schema dar: Das ist eine Übersicht der Tabellen, ihren Spalten, deren Datentypen, sowie den Beziehungen zwischen den Tabellen - aber ohne Daten! In unserem Beispiel sieht das Schema so aus:
Einige Beobachtungen, damit Sie sehen, was hier alles dargestellt ist:
- Boxen: Es gibt eine Tabelle
movie
mit den Spaltentitle
,runtime
,release_date
, etc. - Datentypen rechts: Die Spalte
available_globally
hat den Datentypboolean
und ist demzufolge ein Wahr/Falsch-Wert. (Sie müssen die SQL-Datentypen nicht lernen.) - Pfeile: Die Tabelle
view_summary
hat eine Relation mit der Tabellemovie
. Das bedeutet: Die Daten in der Spaltemovie_id
inview_summary
entsprechen den Daten in der Spalteid
der Tabellemovie
. Das Datenbanksystem kann solche Beziehungen überwachen und je nach Konfiguration sicherstellen, dass es keine Einträge mit einermovie_id
geben kann, die es in der Tabellemovie
gar nicht gibt. - Schlüssel: Die Tabelle
movie
hat eine Spalteid
als Primärschlüssel. Das bedeutet, dass jeder Datensatz der Tabelle anhand vonid
eindeutig identifiziert werden kann. Das Datenbanksystem garantiert uns, dass es keine zwei Filme mit dem gleichen Wert in der Spalteid
zulassen wird.
Schauen wir uns nun an, wie die Daten in der Tabelle view_summary
vorliegen. Eine Frage, die sich stellt: Offenbar werden die Zuschauerzahlen für spezifische Zeitperioden rapportiert. Sind das Stunden, Tage, Wochen, Monate? Ein Beispiel-Query, wie Sie das herausfinden können.
Was gibt es für Zeitperioden? (Sie können das Query wie vorgegeben einfach ausführen.)
select-distinct
Wunderbar. Jetzt wissen wir, dass es bei duration
nur zwei mögliche Werte gibt. Machen wir uns das Leben also einfach: Wir schauen in diesem Quiz ausschliesslich Halbjahresperioden an, also WHERE duration = 'SEMI_ANNUALLY'
.
1. Meistgeschaute Inhalte
Selektieren Sie aus der Tabelle view_summary
die Spalten id
und hours_viewed
der zehn Datensätze, die in einer Halbjahresperiode am meisten geschaut wurden.
id | hours_viewed |
---|---|
id aus der Tabelle view_summary | hours_viewed aus der Tabelle view_summary |
most-watched
2. Meistgeschaute Filme
Finden Sie nun die Filmtitel und hours_viewed
der zehn meistgeschauten Filme in einem Halbjahr heraus. Wir selektieren also nur Filme, Serien werden ignoriert.
title | hours_viewed |
---|---|
title aus der Tabelle movie | hours_viewed aus der Tabelle view_summary |
most-watched-movietitle
3. Serien dominieren
Hmm… Jetzt haben sich die Zahlen stark verändert. Können Sie sich das erklären? Schauen wir uns doch mal die 50 meistgeschauten Inhalte generell in einem Halbjahr an. Selektieren Sie erneut die Filmtitel (title
) und hours_viewed
, aber zeigen Sie zusätzlich auch die hours_viewed
von Serien an - die also keinen title
in der Tabelle movie
haben.
title | hours_viewed |
---|---|
title aus der Tabelle movie (kann NULL sein) | hours_viewed aus der Tabelle view_summary |
most-watched-content
4. Meistgeschaute Staffeln und Filme
Sie sehen: Serien dominieren die Ranglisten total! Versuchen wir nun zusätzlich herauszufinden, welche Serienstaffeln oft geschaut wurden.
Erweitern Sie die 50 meistgeschauten Inhalte in einem Halbjahr mit den Titeln der Filme und der Serienstaffeln. Achtung: Den title
-Spalten müssen Sie andere Namen gegeben.
season_title | movie_title | hours_viewed |
---|---|---|
title aus der Tabelle season | title aus der Tabelle movie | hours_viewed aus der Tabelle view_summary |
50-most-watched-seasons-and-movies
5. Wer war am längsten in den Top 10?
Nun kommt die einzige Frage, bei der wir nicht nur Halbjahresdaten einbeziehen - löschen Sie also für diese Aufgabe WHERE duration = 'SEMI_ANNUALLY'
. Ändern Sie den Rest Ihres Queries so ab, dass Sie die drei Inhalte finden, die am längsten in den Top10 waren.
season_title | movie_title | cumulative_weeks_in_top10 |
---|---|---|
title aus der Tabelle season | title aus der Tabelle movie | cumulative_weeks_in_top10 aus der Tabelle view_summary |
longest-top-10
6. Meistgeschaute Serien überhaupt
Nun nutzen wir eine Aggregatsfunktion, um herauszufinden, welche 10 Serien über alle Staffeln und Halbjahresperioden hinweg am meisten geschaut wurde.
Dazu brauchen Sie erstmals einen JOIN
über zwei Tabellen - nämlich über season
zu tv_show
. Keine Sorge, das ist relativ einfach: Machen Sie einfach einen JOIN
für jede Beziehung - also insgesamt zwei JOIN
s. Ich habe Ihnen das Grundgerüst des Querys vorgeschrieben.
show_title | hours |
---|---|
title aus der Tabelle tv_show | Summe der hours_viewed aller Staffeln einer Serie |
most-watched-alltime
7. Meistgeschaute Serie in einem Halbjahr
Bei der vorhergehenden Frage haben wir alle Halbjahresperioden einer Serie aufaddiert. So haben ältere Serien wie Suits oder Grey’s Anatomy natürlich einen grossen Vorteil!
Korrigieren wir das. Ändern Sie Ihr Query so ab, dass weiterhin jeweils die Zahlen aller Staffeln einer Serie aufaddiert werden - aber nur, wenn sie zur selben Halbjahresperiode gehören. Dazu müssen Sie wissen: Mit GROUP BY spalte1, spalte2
können Sie nach mehreren Spalten gruppieren und Daten derselben Periode haben dasselbe start_date
.
show_title | hours |
---|---|
title aus der Tabelle tv_show | Summe der hours_viewed aller Staffeln einer Serie |
most-watched-semiannually
8. Welche Serie hat die meisten Staffeln erfasst?
Zum Schluss versuchen Sie die fünf Serien zu finden, die (in dieser Datenbank) am meisten Staffeln haben.
show_title | nr |
---|---|
title aus der Tabelle tv_show | Anzahl erfasste Staffeln |
series-with-most-seasons