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
moviemit den Spaltentitle,runtime,release_date, etc. - Datentypen rechts: Die Spalte
available_globallyhat den Datentypbooleanund ist demzufolge ein Wahr/Falsch-Wert. (Sie müssen die SQL-Datentypen nicht lernen.) - Pfeile: Die Tabelle
view_summaryhat eine Relation mit der Tabellemovie. Das bedeutet: Die Daten in der Spaltemovie_idinview_summaryentsprechen den Daten in der Spalteidder Tabellemovie. Das Datenbanksystem kann solche Beziehungen überwachen und je nach Konfiguration sicherstellen, dass es keine Einträge mit einermovie_idgeben kann, die es in der Tabellemoviegar nicht gibt. - Schlüssel: Die Tabelle
moviehat eine Spalteidals Primärschlüssel. Das bedeutet, dass jeder Datensatz der Tabelle anhand vonideindeutig identifiziert werden kann. Das Datenbanksystem garantiert uns, dass es keine zwei Filme mit dem gleichen Wert in der Spalteidzulassen 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 JOINs. 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