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:
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:
…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.
- Napisz najpierw zapytanie wewnętrzne! Uruchom prostą funkcję
COUNT()
z klauzuląGROUP BY
na tabelievent_log
. - Upewnij się, że utworzyłeś alias dla podzapytania (
AS image_per_user
). Jest to wymóg składni w języku SQL. - 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!