SQL-Interview-Fragen: 3 technische Screening-Übungen (für Datenanalysten)

In den letzten 6 Jahren habe ich an vielen Vorstellungsgesprächen teilgenommen – auf beiden Seiten des Tisches. Der lustigste, aber auch gefürchtetste Teil des Prozesses ist das technische Screening. In diesem Artikel zeige ich Ihnen drei SQL-Testübungen, die meiner Erfahrung nach bei Vorstellungsgesprächen von Datenanalysten recht typisch sind. (Und hey, das sind „Beispiel“-SQL-Interview-Fragen, aber sie basieren stark auf der Realität!)

Vor den Aufgaben – Was können Sie bei einem technischen SQL-Screening erwarten?

Es gibt zwei übliche Arten, wie ein technisches SQL-Screening durchgeführt werden kann.

Die einfachere, aber weniger verbreitete Art ist, dass Sie einen Computer, einen Datensatz und eine Aufgabe bekommen. Während Sie die Aufgabe lösen, schauen die Interviewer zu und stellen Fragen. Ein wenig Ausprobieren ist völlig in Ordnung, solange Sie die richtige Lösung in einer angemessenen Zeit finden.

Die andere, schwierigere (und übrigens viel häufigere) Methode ist das Whiteboard-Interview. In diesem Fall bekommt man keinen Computer. Sie müssen die Aufgabe lösen und den Code auf einem Whiteboard skizzieren. Das bedeutet, dass Sie keine Rückmeldung erhalten (zumindest nicht von einem Computer), ob Sie einen logischen oder einen Syntaxfehler in Ihrem Code gemacht haben. Natürlich können Sie die Aufgaben auch durch iteratives Denken lösen (indem Sie die verschiedenen SQL-Probleme eins nach dem anderen knacken), aber Sie müssen Ihre SQL-Kenntnisse sehr gut beherrschen.

Außerdem müssen Sie die Aufgaben normalerweise spontan lösen. Vielleicht haben Sie 3-5 Minuten Bedenkzeit, aber das ist das Maximum, was Sie erwarten können. Die gute Nachricht ist, dass du dadurch relativ einfache Aufgaben bekommst. (Siehe den Schwierigkeitsgrad unten!)

Anmerkung: Es gibt andere Arten von Tech Screening – wie die Take-Home-Aufgabe – bei denen du beweisen kannst, dass du auch komplexere Programmieraufgaben lösen kannst.

Teste dich!

Hier sind drei SQL-Interview-Fragen, die dem sehr nahe kommen, was ich in Bewerbungsgesprächen als Datenanalytiker/Wissenschaftler tatsächlich bekommen oder gegeben habe!
Versuchen Sie, sie alle zu lösen, als wären es Whiteboard-Interviews!
In der zweiten Hälfte des Artikels zeige ich Ihnen auch die Lösungen!

SQL-Interview-Frage Nr. 1

Sagen wir, Sie haben zwei SQL-Tabellen: authors und books.
Der authors-Datensatz hat mehr als 1 Mio. Zeilen; hier sind die ersten sechs Zeilen:

Autorname Buchname
Autor_1 Buch_1
Autor_1 Buch_2
Autor_2 Buch_3
Autor_2 Buch_4
Autor_2 Buch_5
Autor_3 Buch_6

Der books-Datensatz hat auch 1M+ Zeilen und hier sind die ersten sechs:

Buchname verkaufte Exemplare
Buch_1 1000
Buch_2 1500
Buch_3 34000
Buch_4 29000
Buch_5 40000
Buch_6 4400

Erstelle eine SQL-Abfrage, die die TOP 3 Autoren mit den meisten verkauften Büchern anzeigt!

(Anmerkung: Ich habe eine sehr, sehr ähnliche SQL-Interviewfrage für eine Stelle als Datenwissenschaftler bei einem sehr bekannten schwedischen IT-Unternehmen erhalten.)

SQL-Interviewfrage Nr. 2

Sie arbeiten für ein Startup, das eine Online-Präsentationssoftware herstellt. Sie haben ein Ereignisprotokoll, das jedes Mal aufzeichnet, wenn ein Benutzer ein Bild in eine Präsentation einfügt. (Ein Benutzer kann mehrere Bilder einfügen.) Die event_log SQL-Tabelle sieht wie folgt aus:

Benutzernummer Ereignis_Zeit
7494212 1535308430
7494212 1535308433
1475185 1535308444
6946725 1535308475
6946725 1535308476
6946725 1535308477

…und es hat über eine Milliarde Zeilen.
Hinweis: Wenn Ihnen das Format der event_date_time-Spalte nicht bekannt vorkommt, googeln Sie „epoch timestamp“!

Schreiben Sie eine SQL-Abfrage, um herauszufinden, wie viele Benutzer mehr als 1000, aber weniger als 2000 Bilder in ihre Präsentationen eingefügt haben!

(Anmerkung: Ich habe diese Interviewfrage selbst entwickelt und verwendet, um Datenanalysten zu testen, als ich freiberuflich tätig war und meine Kunden Hilfe bei ihrem Einstellungsprozess benötigten.)

SQL-Interview-Frage Nr. 3

Sie haben zwei SQL-Tabellen! Die erste heißt employees und enthält die Namen der Mitarbeiter, die eindeutigen Mitarbeiter-IDs und die Abteilungsnamen eines Unternehmens. Beispiel:

Abteilungsname Mitarbeiternummer Mitarbeitername
Vertrieb 123 John Doe
Verkauf 211 Jane Smith
HR 556 Billy Bob
Verkauf 711 Robert Hayek
Marketing 235 Edward Jorgson
Marketing 236 Christine Packard

Die zweite wird salaries genannt. Sie enthält die gleichen Mitarbeiternamen und die gleichen Mitarbeiternummern – und die Gehälter für jeden Mitarbeiter. Beispiel:

Gehalt Mitarbeiter_ID Mitarbeitername
500 123 John Doe
600 211 Jane Smith
1000 556 Billy Bob
400 711 Robert Hayek
1200 235 Edward Jorgson
200 236 Christine Packard

Das Unternehmen hat 546 Mitarbeiter, also haben beide Tabellen 546 Zeilen.

Drucken Sie jede Abteilung aus, in der das Durchschnittsgehalt pro Mitarbeiter unter 500 $ liegt!

(Hinweis: Ich habe diese Testfrage auf der Grundlage einer echten SQL-Interviewfrage erstellt, die ich von einem Freund gehört habe, der sich bei einem der größten Social-Media-Unternehmen beworben hat (Name beginnt mit ‚F.‘ :))

Lösung der SQL-Interviewfrage Nr. 1

Der Lösungscode lautet:

SELECT authors.author_name, SUM(books.sold_copies) AS sold_sumFROM authorsJOIN booksON books.book_name = authors.book_nameGROUP BY authors.author_nameORDER BY sold_sum DESCLIMIT 3;

Und hier ist eine kurze Erklärung:

1. Zuerst müssen Sie die JOIN einleiten. Ich habe die beiden Tabellen miteinander verbunden, indem ich Folgendes verwendet habe:

SELECT *FROM authorsJOIN booksON books.book_name = authors.book_name;

2. Danach habe ich eine SUM()-Funktion mit einer GROUP BY-Klausel verwendet. Das bedeutet, dass ich in der SELECT-Anweisung die * durch die Spalten author_name und sold_copies ersetzen musste. (Es ist nicht zwingend erforderlich, anzugeben, aus welcher Tabelle Sie die Spalten auswählen, aber es lohnt sich. Deshalb habe ich authors.author_name und books.sold_copies verwendet.)

3. Schließlich habe ich ORDERdie Ergebnisse in DESCendlicher Reihenfolge angeordnet. (Der Einfachheit halber habe ich auch die sum-Spalte in sold_sum umbenannt, indem ich die AS sold_sum-Methode in der SELECT-Anweisung verwendet habe.)

Lösung der SQL-Interviewfrage Nr. 2

Die SQL-Abfrage lautet:

SELECT COUNT(*) FROM (SELECT user_id, COUNT(event_date_time) AS image_per_user FROM event_log GROUP BY user_id) AS image_per_userWHERE image_per_user < 2000 AND image_per_user > 1000;

Der Trick bei dieser Aufgabe besteht darin, dass Sie die COUNT()-Funktion zweimal verwenden mussten: Zuerst mussten Sie die Anzahl der Bilder pro Benutzer zählen, dann die Anzahl der Benutzer (die die gegebene Bedingung erfüllen). Am einfachsten geht das mit einer Unterabfrage

  1. Schreiben Sie zuerst die innere Abfrage! Führen Sie eine einfache COUNT()-Funktion mit einer GROUP BY-Klausel auf der event_log-Tabelle aus.
  2. Stellen Sie sicher, dass Sie einen Alias für die Subquery erstellen (AS image_per_user). Das ist eine Syntaxanforderung in SQL.
  3. Wenden Sie schließlich in einer äußeren Abfrage einen WHERE Filter und eine COUNT() Funktion auf das Ergebnis der Unterabfrage an.

Lösung der SQL-Interview-Frage Nr. 3

Lösung:

SELECT department_name, AVG(salaries.salary) AS avg_salariesFROM employeesJOIN salariesON employees.employee_id = salaries.employee_idGROUP BY department_nameHAVING AVG(salaries.salary) < 500;

Anmerkung: Sie können diese Aufgabe auch mit einer Unterabfrage lösen – aber in einer Interview-Situation wird dem Ausschuss die obige Lösung besser gefallen.

Kurzerläuterung:

1. JOINieren Sie zunächst die beiden Tabellen:

SELECT *FROM employeesJOIN salariesON employees.employee_id = salaries.employee_id

Achtung! Verwenden Sie die Spalte employee_id – nicht die employee_name. (Sie können immer zwei John Does in einer Firma haben, aber die Mitarbeiter-ID ist eindeutig!)

2. Verwenden Sie dann eine AVG()-Funktion mit einer GROUP BY-Klausel – und ersetzen Sie die * durch die entsprechenden Spalten. (Genau wie in der ersten Aufgabe.)

3. Und der letzte Schritt ist die Verwendung einer HAVING-Klausel, um nach dem Ergebnis der AVG()-Funktion zu filtern. (Nicht vergessen: WHERE ist hier nicht gut, weil es vor der AVG()-Funktion eingeleitet würde.)
Aufpassen: in der HAVING-Zeile kann man sich nicht auf den Alias beziehen – man muss wieder die ganze Funktion selbst verwenden!

Vorbereiten Sie sich auf die SQL-Prüfung durch Üben!

Wenn Sie es geschafft haben, all diese Fragen richtig zu lösen, sind Sie wahrscheinlich bereit für ein technisches SQL-Screening für Junior- oder sogar Mid-Level-Data-Analysten.
Wenn nicht, möchte ich Ihnen meinen neuen Online-Kurs empfehlen: SQL für angehende Data Scientists (7-tägiger Online-Kurs) – in dem Sie Ihre SQL-Kenntnisse in nur 7 Tagen auffrischen (oder verbessern) können. Wenn Sie den Kurs beendet haben, kehren Sie einfach zu diesem Artikel zurück, und ich garantiere Ihnen, dass Sie diese Fragen lösen können!

SQL für angehende Datenwissenschaftler (7-tägiger Online-Kurs)

Und wenn Sie gerade erst mit SQL anfangen, beginnen Sie mit meiner Serie „SQL für Datenanalyse“ im Blog!

Schlussfolgerung

Das Schwierige an diesen SQL-Interviewfragen ist, dass sie abstrakt sind. In den Aufgaben heißt es, man solle sich „die Datensätze vorstellen“ und nur ein paar Zeilen davon zeigen. Bei einer solchen Aufgabe ist es sehr hilfreich, wenn man schon einmal ähnliche Datensätze gesehen und ähnliche Probleme gelöst hat. Ich hoffe, dass das Lösen der Aufgaben in diesem Artikel Ihr Selbstvertrauen stärken wird!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.