SQL Interview Questions: 3 Tech Screening Exercises (For Data Analysts)

W ciągu ostatnich 6 lat byłem częścią wielu rozmów kwalifikacyjnych – po obu stronach stołu. Najbardziej zabawną, ale i budzącą największe obawy częścią tego procesu jest badanie techniczne. W tym artykule, pokażę Ci trzy ćwiczenia testowe SQL, które, z mojego doświadczenia, są dość typowe dla rozmów kwalifikacyjnych na stanowisko analityka danych. (I hej, to są „przykładowe” pytania do wywiadu SQL, ale są one mocno oparte na rzeczywistości!)

Przed zadaniami – Czego możesz się spodziewać w przesiewowym badaniu technicznym SQL?

Istnieją dwa popularne sposoby przesiewowego badania technicznego SQL.

Prostszy, ale mniej powszechny sposób polega na tym, że dostajesz komputer, zestaw danych i zadanie. Podczas gdy ty rozwiązujesz zadanie, ankieterzy obserwują i zadają pytania. Trochę prób i błędów jest całkowicie w porządku, tak długo, jak można wymyślić prawidłowe rozwiązanie w rozsądnym czasie.

Inny, trudniejszy (i przy okazji znacznie bardziej powszechne) sposób jest tablica wywiad. W tym przypadku nie dostajesz komputera. Musisz rozwiązać zadanie i naszkicować kod na tablicy. Oznacza to, że nie dostaniesz informacji zwrotnej (przynajmniej nie z komputera), czy popełniłeś błąd logiczny lub składniowy w swoim kodzie. Oczywiście, nadal możesz rozwiązywać zadania myśląc iteracyjnie (rozwiązując różne problemy SQL jeden po drugim), ale musisz być bardzo pewny swoich umiejętności SQL.

Dodatkowo, zazwyczaj musisz rozwiązywać zadania w locie. Może dostaniesz 3-5 minut czasu do namysłu, ale to maksimum, na co możesz liczyć. Dobra wiadomość jest taka, że dzięki temu dostaniesz stosunkowo prostsze zadania. (Zobacz poziom trudności poniżej!)

Uwaga: istnieją inne rodzaje przesiewowych testów technicznych – takie jak zadanie domowe – w których możesz udowodnić, że potrafisz rozwiązywać również bardziej złożone wyzwania kodowania.

Sprawdź się!

Oto trzy pytania na rozmowę kwalifikacyjną SQL, które są naprawdę bliskie temu, co faktycznie dostałem lub podałem na rozmowach kwalifikacyjnych dla analityków danych/naukowców!
Postaraj się rozwiązać wszystkie z nich tak, jakby to były wywiady przy tablicy!
W drugiej połowie artykułu pokażę Ci również rozwiązania!

Pytanie na rozmowę kwalifikacyjną SQL #1

Powiedzmy, że masz dwie tabele SQL: authors i books.
Zbiór danych authors ma 1M+ wierszy; oto pierwsze sześć wierszy:

książka_3 author_2 książka_4 author_2 książka_5 author_3 książka_6 …. …

Zbiór danych books również ma 1M+ wierszy i oto pierwsze sześć:

nazwa_książki sprzedane_kopie
książka_1 1000
książka_2 1500
książka_3 książka_3 34000
book_4 29000
book_5 40000
book_6 4400

Stwórz zapytanie SQL, które pokazuje TOP 3 autorów, którzy sprzedali najwięcej książek w sumie!

(Uwaga: Dostałem bardzo, bardzo podobne pytanie SQL na rozmowę kwalifikacyjną na stanowisko data scientist w bardzo znanej szwedzkiej firmie IT.)

Pytanie SQL #2

Pracujesz dla startupu, który tworzy oprogramowanie do prezentacji online. Posiadasz dziennik zdarzeń, który rejestruje każdy przypadek wstawienia przez użytkownika obrazu do prezentacji. (Jeden użytkownik może wstawić wiele obrazów.) Tabela event_log SQL wygląda następująco:

1535308444 6946725 1535308475 6946725 1535308476 6946725 1535308477 … …

…i ma ponad miliard wierszy.
Uwaga: Jeśli format kolumny event_date_time nie wygląda znajomo, wygoogluj „epoch timestamp”!

Napisz zapytanie SQL, aby dowiedzieć się, ilu użytkowników wstawiło więcej niż 1000, ale mniej niż 2000 obrazów do swoich prezentacji!

(Uwaga: Osobiście stworzyłem i używałem tego pytania do testowania analityków danych, kiedy pracowałem jako freelancer, a moi klienci potrzebowali pomocy w procesie zatrudniania.)

Pytanie Wywiadowcze SQL #3

Masz dwie tabele SQL! Pierwsza z nich nazywa się employees i zawiera nazwiska pracowników, unikalne identyfikatory pracowników oraz nazwy działów w firmie. Przykład:

.

.

department_name employee_id employee_name
Sales 123 John Doe
Sprzedaż 211 Jane Smith
HR 556 Harcerz 556 Billy Bob
Sprzedaż 711 Robert Hayek
Marketing 235 Edward Jorgson
Marketing 236 Christine Packard

Druga z nich nosi nazwę salaries. Zawiera on te same nazwiska pracowników oraz te same identyfikatory pracowników, a także wynagrodzenia dla każdego z nich. Przykład:

.

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

Firma ma 546 pracowników, więc obie tabele mają 546 wierszy.

Wydrukuj każdy dział, w którym średnie wynagrodzenie na pracownika jest niższe niż 500$!

(Uwaga: Stworzyłem to pytanie testowe na podstawie prawdziwego pytania z rozmowy kwalifikacyjnej SQL, które usłyszałem od znajomego, który aplikował w jednej z największych firm zajmujących się mediami społecznościowymi (nazwa zaczyna się na 'F.’ :))

Rozwiązanie SQL Interview Question #1

Kod rozwiązania to:

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;

A oto krótkie wyjaśnienie:

1. Najpierw musisz zainicjować JOIN. Ja połączyłem dwie tabele za pomocą:

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

2. Następnie użyłem funkcji SUM() z klauzulą GROUP BY. Oznacza to, że w instrukcji SELECT musiałem zastąpić * kolumnami author_name i sold_copies. (Nie ma obowiązku wskazywania, z której tabeli wybierasz kolumny, ale warto to zrobić. Dlatego ja użyłem authors.author_name i books.sold_copies.)

3. Ostatecznie ORDER ułożyłem wyniki w DESC kolejności. (Dla wygody zmieniłem również nazwę kolumny sum na sold_sum, używając metody AS sold_sum w instrukcji SELECT.)

Rozwiązanie SQL Interview Question #2

Zapytanie SQL brzmi:

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;

Sztuczka w tym zadaniu polega na tym, że musiałeś użyć funkcji COUNT() dwa razy: najpierw musiałeś policzyć liczbę obrazów na użytkownika, a następnie liczbę użytkowników (którzy spełniają podany warunek). Najłatwiej zrobić to za pomocą podzapytania.

  1. Napisz najpierw zapytanie wewnętrzne! Uruchom prostą funkcję COUNT() z klauzulą GROUP BY na tabeli event_log.
  2. Upewnij się, że utworzyłeś alias dla podzapytania (AS image_per_user). Jest to wymóg składni w języku SQL.
  3. W końcu, w zapytaniu zewnętrznym, zastosuj filtr WHERE i funkcję COUNT() na wyniku podzapytania.

Rozwiązanie pytania SQL Interview Question #3

Rozwiązanie:

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

Uwaga: Możesz rozwiązać to zadanie również za pomocą podzapytania – ale w sytuacji rozmowy kwalifikacyjnej komisji bardziej spodoba się powyższe rozwiązanie.

Krótkie wyjaśnienie:

1. Najpierw POŁĄCZ dwie tabele:

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

Uwaga! Użyj kolumny employee_id – nie employee_name. (Zawsze możesz mieć dwóch Johnów Does w firmie, ale id pracownika jest unikalne!)

2. Następnie użyj funkcji AVG() z klauzulą GROUP BY – i zastąp * odpowiednimi kolumnami. (Tak jak w pierwszym zadaniu.)

3. I ostatni krok to użycie klauzuli HAVING do filtrowania po wyniku funkcji AVG(). (Pamiętaj: WHERE nie jest tu dobre, ponieważ zostałoby zainicjowane przed funkcją AVG().)
Uwaga: w wierszu HAVING nie możesz odwoływać się do aliasu – musisz ponownie użyć samej funkcji!

Przygotuj się do pokazów technicznych SQL, ćwicząc!

Jeśli udało Ci się rozwiązać wszystkie te pytania poprawnie, prawdopodobnie jesteś gotowy na junior lub nawet na mid-level Data Analyst SQL technical screening.
Jeśli nie, pozwól mi polecić mój nowy kurs online: SQL for Aspiring Data Scientists (7-dniowy kurs online) – gdzie możesz wyrównać (lub wyszczotkować) swoje umiejętności SQL w ciągu zaledwie 7 dni. Kiedy skończysz kurs, po prostu wróć do tego artykułu, a gwarantuję, że będziesz w stanie rozwiązać te pytania!

SQL for Aspiring Data Scientists (7-day online course)

A jeśli dopiero zamierzasz zacząć przygodę z SQL, zacznij od mojej serii SQL For Data Analysis na blogu!

Podsumowanie

Trudną częścią tych pytań wywiadu SQL jest to, że są one abstrakcyjne. Zadania mówią, aby „wyobrazić sobie zestawy danych” i pokazać tylko kilka linii z nich. Kiedy dostajesz takie ćwiczenie, to bardzo pomaga, jeśli widziałeś podobne zestawy danych i rozwiązywałeś podobne problemy wcześniej. Mam nadzieję, że rozwiązywanie zadań w tym artykule zwiększy twoją pewność siebie!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.