%md # <span id="uebersicht">Übersicht</span> --- ## 1: Vorbereitung --- 1.1: Anlegen der Daten<br> 1.2: Datenmodell<br> --- ## 2: Einfache Abfragen mit SQL --- 2.1: Spalten auswählen<br> 2.2: Datensätze filtern<br> 2.3: Zählen, Summieren und andere Aggregationen<br> 2.4: Daten gruppieren<br> 2.5: Das Ergebnis sortieren<br> --- ## 3: Erweiterte Abfragen mit SQL --- 3.1: Verhältnisgrößen berechnen mit SQL<br> 3.2: Transformieren von Daten mit SQL<br> 3.2.1: Mehrere Spalten zu einer Spalte zusammenfassen<br> 3.2.2: Eine Spalte zu einer Zeile zusammenfassen<br> 3.2.3: Anreichern der Daten mit weiteren Spalten<br> a) Regelbasierte Anreicherung<br> b) Verwendung von Mapping-Tabellen<br> --- ## 4: Statistische Analysen mit SQL --- 4.1: Lageparameter bestimmen<br> 4.2: Zusammenhänge ermitteln<br> --- ## 5: Komplexe Abfragen mit SQL (nicht Teil dieser Einheit) --- 5.1: Abfragen über mehrere Tabellen (JOINs)<br> 5.2: Mengenoperationen<br> 5.3: Unterabfragen<br> 5.4: Window-Funktionen<br> --- ## Links --- ### Fragebogen & Daten [🔗 Datenmodell Orangenlimonade als XLS](https://docs.google.com/spreadsheets/d/1Sq_CWA-oTN90d0EpA6rEDB3C77dyIXv0HZTq3YWuyy8/edit?usp=sharing)<br> [🔗 Fragebogen Orangenlimonade inklusive Codierung (PDF)](https://drive.google.com/file/d/1-8aEkgxhgUPgRanEoxIu_2vQQybpLeyO/view?usp=sharing)<br> ### SQL [🔗 SQL Cheat Sheet](https://docs.google.com/presentation/d/1jgeZ3RKLmgDgiES1UpvQwUKYGGBWEmpNpYXFVEQIh6s/export/pdf)<br> [🔗 Slides zu SQL aus der Veranstaltung "Information Management"](https://docs.google.com/presentation/d/1Ga31SJKo6KTfMq0m2Z5T7eTmGqMPdBn5cLVnzWHWS4k/export/pdf)<br> [🔗 Spark SQL Funktionsreferenz](https://spark.apache.org/docs/latest/api/sql/)<br>
%md # 1: Vorbereitung Bevor wir loslegen können, müssen wir die Daten in eure persönlichern Databricks-Accounts laden und uns mit dem Datenmodell vertraut machen.
1: Vorbereitung
Bevor wir loslegen können, müssen wir die Daten in eure persönlichern Databricks-Accounts laden und uns mit dem Datenmodell vertraut machen.
Last refresh: Never
%md ## 1.1: Anlegen der Daten --- Den Block unten müsset ihr nur einmal ausführen. Der Code legt die benötigte Tabelle `limonade` an, mit der wir im Folgenden weiter arbeiten werden.
1.1: Anlegen der Daten
Den Block unten müsset ihr nur einmal ausführen. Der Code legt die benötigte Tabelle limonade
an, mit der wir im Folgenden weiter arbeiten werden.
Last refresh: Never
%scala import scala.sys.process._ val tables = Array("limonade") var delimiter = ","; for(t <- tables) { val tableName = t dbutils.fs.rm("file:/tmp/" + tableName + ".csv.gz") "wget -P /tmp https://s3.amazonaws.com/nicolas.meseth/data+sets/" + tableName + ".csv.gz" !! val localpath = "file:/tmp/" + tableName + ".csv.gz" dbutils.fs.rm("dbfs:/datasets/" + tableName + ".csv.gz") dbutils.fs.mkdirs("dbfs:/datasets/") dbutils.fs.cp(localpath, "dbfs:/datasets/") display(dbutils.fs.ls("dbfs:/datasets/" + tableName + ".csv.gz")) sqlContext.sql("drop table if exists " + tableName) val df = spark.read.option("header", "true") .option("inferSchema", "true") .option("sep", delimiter) .option("quote", "\"") .option("escape", "\"") .csv("/datasets/" + tableName + ".csv.gz") df.unpersist() df.cache() df.write.saveAsTable(tableName); }
%md ## 1.2: Datenmodell Eine Liste mit allen Spalten könnt ihr [hier als Spreadsheet](https://docs.google.com/spreadsheets/d/1Sq_CWA-oTN90d0EpA6rEDB3C77dyIXv0HZTq3YWuyy8/edit?usp=sharing) einsehen. Alternativ könnt ihr euch die Spalten einer Tabelle auch mithilfe des `describe` Befehls ausgeben lassen. Den Fragebogen könnt ihr hier herunterladen (`Strg` gedrückt halten, um in einem neuen Tab zu öffnen): [Fragebogen inklusive Codierung (PDF)](https://drive.google.com/file/d/1-8aEkgxhgUPgRanEoxIu_2vQQybpLeyO/view?usp=sharing)
1.2: Datenmodell
Eine Liste mit allen Spalten könnt ihr hier als Spreadsheet einsehen. Alternativ könnt ihr euch die Spalten einer Tabelle auch mithilfe des describe
Befehls ausgeben lassen.
Den Fragebogen könnt ihr hier herunterladen (Strg
gedrückt halten, um in einem neuen Tab zu öffnen): Fragebogen inklusive Codierung (PDF)
Last refresh: Never
%sql describe limonade
id | int | null |
f1_gekauft | int | null |
f1_getrunken | int | null |
f1_weder_noch | int | null |
f2_grund_nichtkauf | string | null |
f3_discounter | int | null |
f3_getraenkemarkt | int | null |
f3_kaufhaus | int | null |
f3_kiosk | int | null |
f3_sonstige | string | null |
f3_supermarkt | int | null |
f4_konsumhaeufigkeit | int | null |
f5_flaschenzahl_025_AB | int | null |
f5_flaschenzahl_033_AB | double | null |
f5_flaschenzahl_050_AB | int | null |
f5_flaschenzahl_075_AB | int | null |
f5_flaschenzahl_100_AB | double | null |
f5_flaschenzahl_150_AB | int | null |
f6_gebindeart | int | null |
f7_muell_einweg | int | null |
f7_muellbergreduz_mehrweg | int | null |
f7_umweltschutz_mehrweg | int | null |
f8_info_beimKauf | int | null |
f8_info_empfehlung | int | null |
f8_info_papierwerbung | int | null |
f8_info_sonstiges | string | null |
f8_info_website_LEH | int | null |
f8_info_website_marken | int | null |
f8_info_werbespots | int | null |
f8_info_zeitschriften | int | null |
f9_konsum_abends | int | null |
f9_konsum_mahlzeiten | int | null |
f9_konsum_party | int | null |
f9_konsum_sonstiges | string | null |
f9_konsum_sport | int | null |
f9_konsum_zwischendurch | int | null |
f10_kauf_einkaufzettel | int | null |
f10_kauf_party_pflicht | int | null |
f10_kauf_spontan | int | null |
f10_kauf_weiterempfehlung | int | null |
f11_assoziation_offen | string | null |
f12_assozi_abwechselung | int | null |
f12_assozi_cool | int | null |
f12_assozi_durst | int | null |
f12_assozi_erfrischung | int | null |
f12_assozi_freizeit | int | null |
f12_assozi_fruchtig | int | null |
f12_assozi_lecker | int | null |
f12_assozi_party | int | null |
f12_assozi_sommer | int | null |
f12_assozi_sonne | int | null |
f12_assozi_sonstige | string | null |
f12_assozi_spass | int | null |
f12_assozi_sport | int | null |
f12_assozi_urlaub | int | null |
f12_assozi_zuckerhaltig | int | null |
f13_weiterempfehlung_NPS_AB | int | null |
f14_grund_weiterempfehlung_NPS | string | null |
f15_markennennung_spontan | string | null |
f16_konsum_adelholzener | int | null |
f16_konsum_bluna | int | null |
f16_konsum_deit | int | null |
f16_konsum_fanta | int | null |
f16_konsum_fritz | int | null |
f16_konsum_herman | int | null |
f16_konsum_mirinda | int | null |
f16_konsum_now_sunny | int | null |
f16_konsum_orangina | int | null |
f16_konsum_river | int | null |
f16_konsum_schweppes | int | null |
f16_konsum_sinalco | int | null |
f16_konsum_sonstige | string | null |
f16_konsum_vilsa | int | null |
f16_konsum_vio | int | null |
f17_lieblingsmarke | int | null |
f17_lieblingsmarke_sonstige | string | null |
f18_preisoffen_A_fanta | double | null |
f18_preisoffen_A_fritz | double | null |
f18_preisoffen_A_vio | double | null |
f19_preisspanne_B_fanta | int | null |
f19_preisspanne_B_fritz | int | null |
f19_preisspanne_B_vio | int | null |
f20_fanta_A | int | null |
f20_fanta_B | int | null |
f20_fritz_A | int | null |
f20_fritz_B | int | null |
f20_vio_A | int | null |
f20_vio_B | int | null |
f21_preis_guter_deal_fanta_A | double | null |
f21_preis_guter_deal_fritz_B | double | null |
f22_preis_zu_teuer_fanta_A | double | null |
f22_preis_zu_teuer_fritz_B | double | null |
f23_preis_teuer_ok_fanta_A | double | null |
f23_preis_teuer_ok_fritz_B | double | null |
f24_preis_zu_guenstig_fanta_A | double | null |
f24_preis_zu_guenstig_fritz_B | double | null |
f25_auf_party_wichtig | int | null |
f25_beim_essen_ueblich | int | null |
f25_zum_mixen | int | null |
f26_besonders_probieren | int | null |
col_name | data_type | comment |
---|
Last refresh: Never
%md # 2: Einfache Abfragen mit SQL SQL ist eine **Abfrage**sprache, die sich gut für strukturierte Daten eignet. Der Begriff "strukturiert" bedeutet in diesem Zusammenhang, dass wir die Daten in Tabellenform vorliegen haben, ähnlich wie in einem Excel-Spreadsheet. Konkret bedeutet das, dass die Daten in **Spalten** und **Zeilen** vorliegen. Jede Spalte besitzt einen Namen und speichert ein Merkmal bezüglich der Daten. Die Daten liegen zeilenweise vor, also z.B. repräsentiert jede Zeile in der Tabelle einen ausgefüllten Fragebogen eines Teilnehmers. Wir verwenden den SELECT-Befehl, um Daten abzufragen. Dabei können wir mit dem SELECT-Befehl unterschiedliche Methoden anwenden, um das Ergebnis nach unseren Wünschen zu gestalten. Einige dieser Methoden lernen wir anhand der folgenden Aufgabenstellungen kennen.
2: Einfache Abfragen mit SQL
SQL ist eine Abfragesprache, die sich gut für strukturierte Daten eignet. Der Begriff "strukturiert" bedeutet in diesem Zusammenhang, dass wir die Daten in Tabellenform vorliegen haben, ähnlich wie in einem Excel-Spreadsheet. Konkret bedeutet das, dass die Daten in Spalten und Zeilen vorliegen. Jede Spalte besitzt einen Namen und speichert ein Merkmal bezüglich der Daten. Die Daten liegen zeilenweise vor, also z.B. repräsentiert jede Zeile in der Tabelle einen ausgefüllten Fragebogen eines Teilnehmers.
Wir verwenden den SELECT-Befehl, um Daten abzufragen. Dabei können wir mit dem SELECT-Befehl unterschiedliche Methoden anwenden, um das Ergebnis nach unseren Wünschen zu gestalten. Einige dieser Methoden lernen wir anhand der folgenden Aufgabenstellungen kennen.
Last refresh: Never
%md ## 2.1: Spalten auswählen Eine wichtige Funktion des SELECT-Befehls ist die Einschränkung der Spalten, die im Ergebnis enthalten sind. Datensätze enthalten häufig sehr viele Spalten, der hier vorliegende Datensatz hat 274 (!) Spalten. Aber nur wenige sind für die Beantwortung einer Fragestellung tatsächlich relevant.
2.1: Spalten auswählen
Eine wichtige Funktion des SELECT-Befehls ist die Einschränkung der Spalten, die im Ergebnis enthalten sind. Datensätze enthalten häufig sehr viele Spalten, der hier vorliegende Datensatz hat 274 (!) Spalten. Aber nur wenige sind für die Beantwortung einer Fragestellung tatsächlich relevant.
Last refresh: Never
%md ### Aufgabe 2 --- **Wählt aus den gesamten Spalten nur die Spalten für die Frage 12 ("Was verbinden Sie spontan mit dem Begriff Orangenlimonade?") aus!**
Aufgabe 2
Wählt aus den gesamten Spalten nur die Spalten für die Frage 12 ("Was verbinden Sie spontan mit dem Begriff Orangenlimonade?") aus!
Last refresh: Never
%md ## 2.2: Datensätze filtern SQL lässt uns nicht nur bestimmen, welche Spalten wir im Ergebnis sehen wollen, sondern auch, welche **Zeilen**. Um das zu anzugeben, können wir so genannte Bedingungen definieren, die für jede Zeile gelten müssen. Gilt eine der Bedingungen nicht, so ist die Zeile nicht im Ergebnis enthalten. Diese Filterbedingungen erstellen leiten wir mit dem Schlüsselwort `WHERE` ein, gefolgt von ein oder mehreren Bedingungen. Die folgenden Aufgaben bringen uns die WHERE-Klausel näher.
2.2: Datensätze filtern
SQL lässt uns nicht nur bestimmen, welche Spalten wir im Ergebnis sehen wollen, sondern auch, welche Zeilen. Um das zu anzugeben, können wir so genannte Bedingungen definieren, die für jede Zeile gelten müssen. Gilt eine der Bedingungen nicht, so ist die Zeile nicht im Ergebnis enthalten.
Diese Filterbedingungen erstellen leiten wir mit dem Schlüsselwort WHERE
ein, gefolgt von ein oder mehreren Bedingungen. Die folgenden Aufgaben bringen uns die WHERE-Klausel näher.
Last refresh: Never
%md ### Aufgabe 3 --- **Wir wollen uns nur die Antworten von Teilnehmern ansehen, deren Haushalt mindestens 2 Personen angehören. Filtert die Datensätze entsprechend!** ✓ Die Größe des Haushalts wird in Frage 48 erfasst.
Aufgabe 3
Wir wollen uns nur die Antworten von Teilnehmern ansehen, deren Haushalt mindestens 2 Personen angehören. Filtert die Datensätze entsprechend!
✓ Die Größe des Haushalts wird in Frage 48 erfasst.
Last refresh: Never
%md ### Aufgabe 4 --- **Angenommen es interessieren uns nur Antworten von Teilnehmern, die 1990 oder später geboren wurden. Filtert die Datensätze entsprechend!** ✓ Das Geburtsjahr wird in Frage 39 erfasst.
Aufgabe 4
Angenommen es interessieren uns nur Antworten von Teilnehmern, die 1990 oder später geboren wurden. Filtert die Datensätze entsprechend!
✓ Das Geburtsjahr wird in Frage 39 erfasst.
Last refresh: Never
%md ### Aufgabe 5 --- **Filtert die Daten so, dass nur Teilnehmer mit dem Status "Noch Schüler", "Volks-/ Hauptschulabschluss" und "Ohne Abschluss" enthalten sind!** ✓ Der Schulabschluss wird in Frage 40 erfasst.
Aufgabe 5
Filtert die Daten so, dass nur Teilnehmer mit dem Status "Noch Schüler", "Volks-/ Hauptschulabschluss" und "Ohne Abschluss" enthalten sind!
✓ Der Schulabschluss wird in Frage 40 erfasst.
Last refresh: Never
%md ### Aufgabe 6 --- **Welche der männlichen Teilnehmer essen mehrmals pro Woche Fast-Food?** ✓ Das Geschlecht wird in Frage 53 erfasst.<br> ✓ Die Ernährungsgewohnheiten werden in Frage 38 erfasst.
Aufgabe 6
Welche der männlichen Teilnehmer essen mehrmals pro Woche Fast-Food?
✓ Das Geschlecht wird in Frage 53 erfasst.
✓ Die Ernährungsgewohnheiten werden in Frage 38 erfasst.
Last refresh: Never
%md ## 2.3: Zählen, Summieren und andere Aggregationen Häufig wollen wir aggregierte Werte aus den Daten ermitteln. Jedes Mal wenn wir fragen "*Wie viele...*" fragen wir nach einer Zahl, die letztlich das Ergebnis einer Aggregation der Daten ist. Es gibt viele andere Möglichkeiten, Daten zu aggregieren. Einige davon lernen wir anhand der folgenden Aufgaben kennen.
2.3: Zählen, Summieren und andere Aggregationen
Häufig wollen wir aggregierte Werte aus den Daten ermitteln. Jedes Mal wenn wir fragen "Wie viele..." fragen wir nach einer Zahl, die letztlich das Ergebnis einer Aggregation der Daten ist. Es gibt viele andere Möglichkeiten, Daten zu aggregieren. Einige davon lernen wir anhand der folgenden Aufgaben kennen.
Last refresh: Never
%md ### Aufgabe 8 --- **Wie groß ist der größte Haushalt unter den Antworten?** ✓ Die Größe des Haushalts wird in Frage 48 erfasst.<br> ✓ `CAST(<col> AS DECIMAL) IS NOT NULL` prüft ob der Wert ind er Spalte einen numerischen Wert enthält<br> ✓ Die Funktionen `max()` und `min()` sprechen für sich.<br>
Aufgabe 8
Wie groß ist der größte Haushalt unter den Antworten?
✓ Die Größe des Haushalts wird in Frage 48 erfasst.
✓ CAST(<col> AS DECIMAL) IS NOT NULL
prüft ob der Wert ind er Spalte einen numerischen Wert enthält
✓ Die Funktionen max()
und min()
sprechen für sich.
Last refresh: Never
%md ### Aufgabe 9 --- **Wie wichtig ist den Teilnehmern Orangenlimonade auf Parties im Durchschnitt?** ✓ Diese Info findet ihr in Frage 25.<br> ✓ Die Funktion `avg()` berechnet das arithmetische Mittel.<br> ✓ Vorsicht, ihr müsst etwas beachten. Schaut euch mal das Ergebnis an und überlegt, ob es valide ist.<br>
Aufgabe 9
Wie wichtig ist den Teilnehmern Orangenlimonade auf Parties im Durchschnitt?
✓ Diese Info findet ihr in Frage 25.
✓ Die Funktion avg()
berechnet das arithmetische Mittel.
✓ Vorsicht, ihr müsst etwas beachten. Schaut euch mal das Ergebnis an und überlegt, ob es valide ist.
Last refresh: Never
%md ### Aufgabe 10 --- **Wie viele Personen leben in Summe in den Haushalten der Befragten?** ✓ Diese Info findet ihr in Frage 48.<br> ✓ Die Funktion `sum()` summiert numerische Daten.<br>
Aufgabe 10
Wie viele Personen leben in Summe in den Haushalten der Befragten?
✓ Diese Info findet ihr in Frage 48.
✓ Die Funktion sum()
summiert numerische Daten.
Last refresh: Never
%md ## 2.4: Daten Gruppieren Wir haben oben Aggregationsfunktionen kennengelernt, die uns jeweils einen Wert zurückliefern. Beispiele waren die Summe, der Durchschnitt oder der größte Wert der gesamten Daten. Oft reicht aber ein Wert alleine nicht aus, sondern wir brauchen je einen Durchchnittswert pro irgendeiner Untergruppe. Beispielsweise das Durschnittsalter pro Geschlecht. Um das mit SQL zu erreichen nutzen wir so genannte Gruppierungen, die wir auf Basis von Spalten (oder Ausdrücken) bilden können. Wir verwenden hierfür das Schlüsselwort `group by` und nennen dann die zu gruppierenden Spalten (oder Ausdrücke).
2.4: Daten Gruppieren
Wir haben oben Aggregationsfunktionen kennengelernt, die uns jeweils einen Wert zurückliefern. Beispiele waren die Summe, der Durchschnitt oder der größte Wert der gesamten Daten. Oft reicht aber ein Wert alleine nicht aus, sondern wir brauchen je einen Durchchnittswert pro irgendeiner Untergruppe. Beispielsweise das Durschnittsalter pro Geschlecht.
Um das mit SQL zu erreichen nutzen wir so genannte Gruppierungen, die wir auf Basis von Spalten (oder Ausdrücken) bilden können. Wir verwenden hierfür das Schlüsselwort group by
und nennen dann die zu gruppierenden Spalten (oder Ausdrücke).
Last refresh: Never
%md ### Aufgabe 12 --- **Wie ist die Verteilung der Postleitzahlen unter den Antworten?** ✓ Die PLZ wird in Frage 51 erhoben.<br> ✓ Erstellt auch eine passende Visualisierung.<br> ✓ Stellt sicher, dass nur gültige PLZ im Ergebnis enthalten sind.
Aufgabe 12
Wie ist die Verteilung der Postleitzahlen unter den Antworten?
✓ Die PLZ wird in Frage 51 erhoben.
✓ Erstellt auch eine passende Visualisierung.
✓ Stellt sicher, dass nur gültige PLZ im Ergebnis enthalten sind.
Last refresh: Never
%md ### Aufgabe 13 --- **Wie ist die Verteilung der Geschlechter unter den Teilnehmern der Umfrage?** ✓ Das Geschlecht wird in Frage 53 erhoben.<br> ✓ Zeigt die Verteilung der absoluten Zahlen.<br> ✓ Erstellt auch eine passende Visualisierung.<br>
Aufgabe 13
Wie ist die Verteilung der Geschlechter unter den Teilnehmern der Umfrage?
✓ Das Geschlecht wird in Frage 53 erhoben.
✓ Zeigt die Verteilung der absoluten Zahlen.
✓ Erstellt auch eine passende Visualisierung.
Last refresh: Never
%md ### Aufgabe 14 --- **Wie sind die Geburtsjahrgänge verteilt?** ✓ Die Info findet ihr in Frage 39.<br> ✓ Zeigt die Verteilung der absoluten Zahlen.<br> ✓ Visualisiert das Ergebnis als Balkendiagramm, sortiert nach dem Jahrgang.<br>
Aufgabe 14
Wie sind die Geburtsjahrgänge verteilt?
✓ Die Info findet ihr in Frage 39.
✓ Zeigt die Verteilung der absoluten Zahlen.
✓ Visualisiert das Ergebnis als Balkendiagramm, sortiert nach dem Jahrgang.
Last refresh: Never
%md ### Aufgabe 15 --- **Wie ist die Geschlechterverteilung pro Studiengang?** ✓ Das Geschlecht wird in Frage 53 erhoben.<br> ✓ Der Studiengang wird in Frage 44 erhoben.<br> ✓ Zeigt die Verteilung der absoluten Zahlen.<br>
Aufgabe 15
Wie ist die Geschlechterverteilung pro Studiengang?
✓ Das Geschlecht wird in Frage 53 erhoben.
✓ Der Studiengang wird in Frage 44 erhoben.
✓ Zeigt die Verteilung der absoluten Zahlen.
Last refresh: Never
%md ## 2.5: Das Ergebnis sortieren Oft ist es notwendig, das Resultat einer SQL Abfrage zu sortieren. Häufige Szenarien sind Top-Listen sowie die beste oder schlechteste Zeile im Ergebnis. Die folgenden Aufgaben helfen euch dabei, das Sortieren mit SQL anwenden zu lernen.
2.5: Das Ergebnis sortieren
Oft ist es notwendig, das Resultat einer SQL Abfrage zu sortieren. Häufige Szenarien sind Top-Listen sowie die beste oder schlechteste Zeile im Ergebnis. Die folgenden Aufgaben helfen euch dabei, das Sortieren mit SQL anwenden zu lernen.
Last refresh: Never
%md ### Aufgabe 17 --- **Welche Einkommensklasse nennt im Durchschnitt den höchsten Preis für einen guten Deal (egal welche Limonadensorte)?** ✓ Die Abfrage von Preisgrenzen erfolgt in Frage 21.<br> ✓ Erstellt auch eine passende Visualisierung.<br>
Aufgabe 17
Welche Einkommensklasse nennt im Durchschnitt den höchsten Preis für einen guten Deal (egal welche Limonadensorte)?
✓ Die Abfrage von Preisgrenzen erfolgt in Frage 21.
✓ Erstellt auch eine passende Visualisierung.
Last refresh: Never
%md # 3: Erweiterte Abfragen mit SQL Der Funktionsumfang von SQL ist weitaus größer als wir ihn im vorigen Teil kennengelernt haben. Aber auch mit den einfachen Mitteln können wir schon sehr viel erreichen. Darum geht es in diesem Abschnitt.
3: Erweiterte Abfragen mit SQL
Der Funktionsumfang von SQL ist weitaus größer als wir ihn im vorigen Teil kennengelernt haben. Aber auch mit den einfachen Mitteln können wir schon sehr viel erreichen. Darum geht es in diesem Abschnitt.
Last refresh: Never
Übersicht
1: Vorbereitung
1.1: Anlegen der Daten
1.2: Datenmodell
2: Einfache Abfragen mit SQL
2.1: Spalten auswählen
2.2: Datensätze filtern
2.3: Zählen, Summieren und andere Aggregationen
2.4: Daten gruppieren
2.5: Das Ergebnis sortieren
3: Erweiterte Abfragen mit SQL
3.1: Verhältnisgrößen berechnen mit SQL
3.2: Transformieren von Daten mit SQL
3.2.1: Mehrere Spalten zu einer Spalte zusammenfassen
3.2.2: Eine Spalte zu einer Zeile zusammenfassen
3.2.3: Anreichern der Daten mit weiteren Spalten
a) Regelbasierte Anreicherung
b) Verwendung von Mapping-Tabellen
4: Statistische Analysen mit SQL
4.1: Lageparameter bestimmen
4.2: Zusammenhänge ermitteln
5: Komplexe Abfragen mit SQL (nicht Teil dieser Einheit)
5.1: Abfragen über mehrere Tabellen (JOINs)
5.2: Mengenoperationen
5.3: Unterabfragen
5.4: Window-Funktionen
Links
Fragebogen & Daten
🔗 Datenmodell Orangenlimonade als XLS
🔗 Fragebogen Orangenlimonade inklusive Codierung (PDF)
SQL
🔗 SQL Cheat Sheet
🔗 Slides zu SQL aus der Veranstaltung "Information Management"
🔗 Spark SQL Funktionsreferenz
Last refresh: Never