Nieudany test rekrutacyjny - zły silnik bazodanowy

0

Cześć wszystkim.

Piszę do was po wczorajszym teście rekrutacyjnym na staż na analityka danych (Power BI i te sprawy).
Sprawa jest wielowymiarowa, bo i proszę o radę, i o opinię, i o pomoc 😆 Wszystkie zadania i rozwiązania moje wkleję pod główną częścią posta.

Dostałem do rozwiązania 5 zadań z sql-a do wykonania w ciągu godziny na tej stronie https://www.w3schools.com/sql/trysql.asp?filename=trysql_op_in. Patrzę na nie, wydają się w porządku. Początek zresztą idzie mi dobrze, aż do końcówki 3 zadania. Klauzula LIMIT nie chciała mi za nic działać. Straciłem jakieś 10 minut na rozwiązanie tego, nadal nic. Pod koniec znalazłem takie coś, jak klauzula TOP. Zadziałało, więc uznałem, że dodam to jako alternatywne rozwiązanie.

Zostawiłem więc to i przeszedłem do zadania 4. Tu też wydawało się wszystko dość łatwe. Problem w tym, że nie mogłem sprawdzić, czy to działa, bo z jakiegoś powodu przy wklepaniu drugiego INNER JOINA przestało wszystko działać. Znowu straciłem na tym długie minuty. Skończyło się to tym, że zrobiłem literówkę (dodatkowy średnik) i chyba nie do końca zrozumiałem to zadanie.

Na zadanie 5 nie starczyło mi czasu, by spróbować napisać podzapytanie (miałem takiego rodzaju zadania na zajęciach). Zauważyłem jednak, że klauzula TOP 4 spełnia warunki zadania i wyznacza tych dodatkowych klientów, więc zostawiłem to.

Po fakcie odkryłem, że został mi wysłany link do edytora dla silnika SQL Server, a nie jakiegoś innego (np. MySQL, który bardzo dobrze znam), którego zupełnie nie znałem. Nie wiedziałem, że tam INNER JOIN-y trzeba wstawiać w jakieś nawiasy, bo inaczej to nie zadziała...

W mailu zwrotnym napisałem, że nie byłem w stanie używać klauzuli LIMIT i wielokrotnych INNER JOIN-ów, przez co nie byłem w stanie sprawdzić, czy zadanie dobrze działa.

I teraz pytania:

  1. Czy jest jakaś szansa, że na podstawie tych odpowiedzi mnie nie odrzucą, ewentualnie dadzą drugą szansę? xd
  2. Czy pisać do nich jakiegoś dodatkowego maila z informacją o tym, że link został mi wysłany do silnika bazy danych, którego nigdy nie używałem, przez co miałem te wymienione problemy? Trzeba tutaj też dodać, że zadanie 3 było niemożliwe do wykonania, bo w SQL Server nie ma klauzuli LIMIT.
  3. Jak w ogóle oceniacie moje wypociny?

I teraz obiecane zadania i moje rozwiązania:

  1. Wyświetl zamówienia złożone w czwartym kwartale 1996 roku.

    SELECT *
    FROM Orders
    WHERE (MONTH(OrderDate) = 10 OR MONTH(OrderDate) = 11 OR MONTH(OrderDate) = 12)
    AND YEAR(OrderDate) = 1996;
    
  2. Wyświetl zamówienia od klientów z Brazyli.

    SELECT *
    FROM Orders o
    INNER JOIN Customers c
    ON o.CustomerID = c.CustomerID
    WHERE c.Country = 'Brazil'
    
  3. Wyświetl nazwę klienta i liczbę zamówień dla TOP 3 klientów, którzy złożyli najwięcej
    zamówień w 1996 roku (skorzystaj z klauzuli „LIMIT”).

    SELECT c.CustomerName, COUNT(o.OrderID) AS 'Liczba zamówień'
    FROM Orders o
    INNER JOIN Customers c
    ON o.CustomerID = c.CustomerID
    WHERE YEAR(OrderDate) = 1996
    GROUP BY c.CustomerName
    ORDER BY 2 DESC
    LIMIT 3;
    
    Alternatywnie
    
    SELECT TOP 3 c.CustomerName, COUNT(o.OrderID) AS 'Liczba zamówień'
    FROM Orders o
    INNER JOIN Customers c
    ON o.CustomerID = c.CustomerID
    WHERE YEAR(OrderDate) = 1996
    GROUP BY c.CustomerName
    ORDER BY 2 DESC
    
    
  4. Wyświetl produkty i wartość zamówień złożonych w 1997 roku. Wyniki posortuj malejąco
    według przychodów.

    SELECT p.ProductName, o.OrderID, SUM(p.Price * od.Quantity) AS Kwota
    FROM Products p
    INNER JOIN OrderDetails od
    ON p.ProductID = od.ProductID
    INNER JOIN Orders o
    ON od.OrderID = o.OrderID;
    WHERE YEAR(OrderDate) = 1997
    GROUP BY p.ProductName, o.OrderID
    ORDER BY 3 DESC;
    
  5. Wyświetl nazwę klienta i liczbę zamówień dla TOP 4 klientów, którzy złożyli najwięcej
    zamówień w 1996 roku. Obsłuż sytuację, w której klienci mają tyle samo zamówień (wyświetl
    kolejnych klientów jeżeli mają tyle samo zamówień co czwarty z kolei klient).

    SELECT TOP 4 c.CustomerName, COUNT(o.OrderID) AS 'Liczba zamówień'
    FROM Orders o
    INNER JOIN Customers c
    ON o.CustomerID = c.CustomerID
    WHERE YEAR(OrderDate) = 1996
    GROUP BY c.CustomerName
    ORDER BY 2 DESC
    

Pozdrawiam! 😀

2

W zależności od silnika bazodanowego i tego jaki ma optymalizator zapytań i jaka jest struktura fizyczna:

  1. Zamiast (co może generować konieczność wywołaniu funkcji MONTH i YEAR na każdym z przetwarzanych wierszy)

    (MONTH(OrderDate) = 10 OR MONTH(OrderDate) = 11 OR MONTH(OrderDate) = 12)
    AND YEAR(OrderDate) = 1996;
    

    można bezpośrednio użyć zakresu dat (jeśli będzie indeks na OrderDate, to silnik może z niego skorzystać)

    OrderDate>= ... and OrderDate < ... 
    
  2. Warunki złączenia

       JOIN Customers c
    ON o.CustomerID = c.CustomerID
    WHERE YEAR(OrderDate) = 1996
    

    vs

       JOIN Customers c
    ON o.CustomerID = c.CustomerID AND YEAR(OrderDate) = 1996
    

    vs

       JOIN Customers c
    ON o.CustomerID = c.CustomerID AND OrderDate >='1996-01-01' and OrderDate<1997... -- plus/minus właściwe skonstruowanie daty 
    

    (vs FILTR po zakresie dat w kaluzuli WHERE).

W zależności od silnika może to mieć znaczenie wydajnościowe, ale nie musi.

0

@Dawid Nicpoń

  1. Jak wyżej,
  2. Ja osobiście bym zrobił to podzapytaniem, nie jestem pewny SQL server, ale w MySQL będzie wydajniejsze, ponadto tak skonstruowane, zapytanie zwróci nie tylko Order ale też Customers, a nie tak brzmi polecenie,
  3. TOP nie wymaga ORDER BY, więc osoba sprawdzająca, będzie wiedzieć, że albo nie znasz danego silnika, albo nie wumkesz w dokumentację. Nie ma też LIMIT,
  4. Tutaj też bym zrobił podzapytanie, by ograniczyć na samym początku przeszukiwany zbiór,
  5. To c,ego szukasz to WITH TIES.
    No słabo to widzę, tym bardziej, że z tego co mówisz to było jakieś nieporozumienie, że nie wiedziałeś na jakim silniku będziesz pracować.
5

Kategoria Bazy danych, ale odpiszę tak, jakby to było w dziale Kariera.

Ten post pokazuje bardzo smutną rzeczywistość branży IT. Aplikujesz na stanowisko intelektualne wymagające myślenia w szeroko pojętej branży IT:

Piszę do was po wczorajszym teście rekrutacyjnym na staż na analityka danych (Power BI i te sprawy).

A każą ci robić w ciągu godziny zadania na czas jak w jakimś teleturnieju czy reality show:

Dostałem do rozwiązania 5 zadań z sql-a do wykonania w ciągu godziny na tej stronie

Specyfika tego zadania wymaga od ciebie myślenia na czas, gdzie każda minuta jest ważna, bo stracisz punkty:

Patrzę na nie, wydają się w porządku. Początek zresztą idzie mi dobrze, aż do końcówki 3 zadania. Klauzula LIMIT nie chciała mi za nic działać. Straciłem jakieś 10 minut na rozwiązanie tego, nadal nic. Pod koniec znalazłem takie coś, jak klauzula TOP. Zadziałało, więc uznałem, że dodam to jako alternatywne rozwiązanie

I tak dobrze, że nie każą się tarzać w błocie.

A na końcu wisienka na torcie, czyli mimo tych wszystkich upokorzeń, to nie masz wyboru, jak uszy po sobie i prosić o drugą szansę:

Czy jest jakaś szansa, że na podstawie tych odpowiedzi mnie nie odrzucą, ewentualnie dadzą drugą szansę? xd

I nie jest to krytyka skierowana do ciebie, tylko ogólna refleksja na temat tego, jak wygląda "rynek kandydata" w praktyce :D

0

@Dregorio

  1. TOP nie wymaga ORDER BY, więc osoba sprawdzająca, będzie wiedzieć, że albo nie znasz danego silnika, albo nie wumkesz w dokumentację. Nie ma też LIMIT,

Co do zadania 3. to było wprost napisane, żeby użyć klauzuli LIMIT, więc stąd mój mindfuck.

No słabo to widzę, tym bardziej, że z tego co mówisz to było jakieś nieporozumienie, że nie wiedziałeś na jakim silniku będziesz pracować.

Na żadnym dotychczasowym etapie rekrutacji nie było mowy, w jakim silniku będzie praca.
W wymaganiach była tylko "Podstawowa znajomość SQL-a".

0

Na żadnym dotychczasowym etapie rekrutacji nie było mowy, w jakim silniku będzie praca.

No więc właśnie. Kłamstwo rekrutera #1.

W wymaganiach była tylko "Podstawowa znajomość SQL-a".

No to po kiego ch* wymóg biegłości w sql? Zagadnienia typu budowanie kompleksowych zapytań to już zaawansowany aspekt i wykracza daleko poza ramy stanowiska.
A tak btw: od kiedy to analitylk danych musi być biegły/znać jakieś z duopy wzięte niuanse sql?

0

Proponuję Ci teraz odwrócenie ról. Pomyśl co dla nich jest naturalne - chodzi o listę czynności. Wykonuj je i sprawdzaj reakcję. Zaplanuj tak działania, żeby to nie budziło w nich zdziwienia, dowiedz się czego chcą i wydzielaj im to po jak najmniejszym kawałku. Przy każdej porcji staraj się wyciągnąć jak najwięcej informacji. Możesz je tutaj publikować.
Zrobienie zadań i wysłanie to jest jedna czynność, zastanów się jak to podzielić tak, żeby to zrobić w jak największej liczbie kroków - odwrotnie do algorytmu.
Poszukaj informacji o nich, staraj się rozpoznać strukturę w jakiej operują.

Chyba, że chcesz zawsze robić za szczura laboratoryjnego.

0

@johnny_Be_good
Tylko że ja nie wiem, czego chcą xD
Jestem świeżak na rynku pracy. Nigdy nie zaszedłem tak daleko w rekrutacji. To mogłaby być pierwsza rozmowa rekrutacyjna w życiu.

0
BezqyczekPL napisał(a):

@johnny_Be_good
Tylko że ja nie wiem, czego chcą xD
Jestem świeżak na rynku pracy. Nigdy nie zaszedłem tak daleko w rekrutacji. To mogłaby być pierwsza rozmowa rekrutacyjna w życiu.

A czego może chcieć rekruter? Wziąć pieniądze i coś tam pokazać jako wynik. Ty chyba w jego życiu znaczysz najmniej. Więc jest duże prawdopodobieństwo, że Cię nie widzi.
Zapewne jest mężczyzną albo kobietą. Chyba wiesz czym się różnią ludzie.
Chcesz być analitykiem, to co piszę to najczystsza analiza. Lista możliwości, obliczanie prawdopodobieństwa.
Może to jest właśnie test a nie ten SQL.

Ogólnie jedyna bardzo pewna rzecz, to jest to, że chce żyć, może zagraj tą kartą?

0

@johnny_Be_good
Ale to jeszcze za wcześnie, żeby coś się od nich dowiadywać. Wyniki miały być po nowym roku dopiero prawdopodobnie xd
Jeśli dostanę odmowę, to zacznę wypytywać, co zrobiłem źle i wyciągnę wnioski na kolejną rekrutację.
Nie wiem, co miałbym wypytywać więcej xd

Moja teoria jest taka, że rekruter sam za bardzo nie zna się na SQL-u, tylko dostał od kogoś zadania i pewnie przesłał.

0
BezqyczekPL napisał(a):

@johnny_Be_good
Ale to jeszcze za wcześnie, żeby coś się od nich dowiadywać. Wyniki miały być po nowym roku dopiero prawdopodobnie xd
Jeśli dostanę odmowę, to zacznę wypytywać, co zrobiłem źle i wyciągnę wnioski na kolejną rekrutację.
Nie wiem, co miałbym wypytywać więcej xd

Moja teoria jest taka, że rekruter sam za bardzo nie zna się na SQL-u, tylko dostał od kogoś zadania i pewnie przesłał.

Czemu miałby Ci prawdę powiedzieć?

Bardzo dobra metoda to jest , przygotowywanie się na sytuacje już teraz, długie spacery i się przygotowujesz na to, że nie zostałeś przyjęty. I wtedy powinny Ci wpaść różne możliwości prowadzenia dialogu.

Nauka IT nie zajmuje dużo czasu, jak by szukali pracownika to by wzięli pierwszego lepszego.

Ale to jest IT - wymiana informacji.

To nie jest DIT (digital information technology) tylko IT (information technology)

2

Sorry, ale na analityka danych bez baz danych ani rusz. Dostałeś do zrobienia podstawy podstaw. A i tak jedno zrobiłeś źle (5), a dwa średnio (1 i 2).
Albo się poducz, albo startuj na juniora.
Powodzenia

0

@Marcin.Miga
Ale to jest staż/praktyki, czyli coś etap przed juniorem. To czemu miałbym tak to zrobić?
Piąte zadanie zrobiłbym na podzapytanie, ale straciłem pół godziny na to, że nie rozumiałem, że pracuję na innym silniku niż mi się wydaje.

Co do pierwszego i drugiego to wiem, że mógłbym zrobić lepiej.

1
BezqyczekPL napisał(a):
  1. Czy jest jakaś szansa, że na podstawie tych odpowiedzi mnie nie odrzucą, ewentualnie dadzą drugą szansę? xd
  2. Czy pisać do nich jakiegoś dodatkowego maila z informacją o tym, że link został mi wysłany do silnika bazy danych, którego nigdy nie używałem, przez co miałem te wymienione problemy? Trzeba tutaj też dodać, że zadanie 3 było niemożliwe do wykonania, bo w SQL Server nie ma klauzuli LIMIT.

Pozostali kandydaci zapewne mieli te same zadania i problemy, jeśli wypadli lepiej mimo tego to zapewne oni zostaną wybrani. Nie ważne jak niesprawiedliwe jest zadanie, jeśli wszyscy grają według tych samych reguł to jest to nadal fair.
W związku z tym nie ma też sensu pisać do nich o tym, z tego co rozumiem miałeś napisać tylko zapytania w MySQL, nie musiałeś ich testować i nie ma znaczenia że edytor obsługiwał inny dialekt tym bardziej że zadania wyglądają na tyle prosto że nie było takiej potrzeby ich testowania jeśli ogarniasz temat.

Jest coś takiego jak ANSI SQL, zapytania które działają na praktycznie każdym silniku SQL, polecam od tego zacząć a dopiero później poznawać dodatkowe składnie dla konkretnego silnika. Choć akurat nie ma nadal z jakiegoś powodu w 2024 roku unormowanego sposobu na LIMIT / TOP i operacje na datach.

0

@obscurity To, że wszyscy mogli mieć to samo, to jedyna moja nadzieja. xD
Dam znać po rekrutacji, jeśli nie zapomnę, jaką dostałem informację zwrotną.
Proste zapytania, jak 1, 2 i 3, jestem w stanie pisać z głowy, ale gdy już pojawiają się różne sumy, czy podzapytania, to często metodą prób i błędów dochodziłem do rozwiązań, bo jakieś błędy wywalało :P
Często chodziło o jakieś literówki, ale nie tylko.

0
BezqyczekPL napisał(a):

@obscurity To, że wszyscy mogli mieć to samo, to jedyna moja nadzieja. xD
Dam znać po rekrutacji, jeśli nie zapomnę, jaką dostałem informację zwrotną.
Proste zapytania, jak 1, 2 i 3, jestem w stanie pisać z głowy, ale gdy już pojawiają się różne sumy, czy podzapytania, to często metodą prób i błędów dochodziłem do rozwiązań, bo jakieś błędy wywalało :P
Często chodziło o jakieś literówki, ale nie tylko.

Błędy czy komunikaty?

0

@johnny_Be_good Komunikaty o błędach 🙃

0
LukeJL napisał(a):

A każą ci robić w ciągu godziny zadania na czas jak w jakimś teleturnieju czy reality show:

Czy limit czasowy na zadania jest złą praktyką? Bo mam wrażenie, że jest konieczny do odsiania ściemniaczy, możemy co najwyżej dyskutować, czy 60 minut jest wystarczające czy nie.

1
kelog napisał(a):
LukeJL napisał(a):

A każą ci robić w ciągu godziny zadania na czas jak w jakimś teleturnieju czy reality show:

Czy limit czasowy na zadania jest złą praktyką? Bo mam wrażenie, że jest konieczny do odsiania ściemniaczy

Odwrotnie chyba. Ściemniacz wygeneruje kod za pomocą ChatGPT albo przeklei skądś i zmieści się w limitach czasowych tego typu zadań. To właśnie ktoś uczciwy może się nie zmieścić (nie mówię o tym zadaniu, tylko ogólnie o tego typu zadaniach, gdzie każą pisać jakiś kod i "w godzinę masz się zmieścić". Bywało tak, że chciałem zrobić dobrze, uczciwie, a potem okazywało się, że przez np. godzinę rozkminiałem rozwiązanie, a nie napisałem wiele kodu, albo napisałem tak brudny kod, że aż szkoda pokazywać. Tego typu zadania jakoś strasznie odległe są od rzeczywistej pracy, gdzie jednak nikt nie każe napisać w ciągu godziny czy dwóch rozwiązania, tylko wszystko na spokojnie (dopóki się wyrabiasz z taskami, ale tego po godzinie nikt nie oceni. A na rekrutacjach oceniają).

0

Chciałbym jeszcze na dobranoc dodać jedną notkę do tych moich zadań.

Zobaczcie na wynik tego mojego zadania 5. To co miało zwrócić, zwraca. Dlatego nie mam pewności zupełnie, jak zostanie potraktowane to zadanie. W pewnym sensie zrobiłem go dobrze, ale jeśli na przykład wymagano MySQL, to dlaczego dostałem edytor Server SQL, a nigdzie nie było wprost mowy, jakiego SQL-a mam używać.
screenshot-20231228224654.png

1

Zamiast pisać tu posty, znajdź tutorial SQL i ucz się na przyszłość. Dostałeś zadania pt. "Zaliczenie z podstaw SQL", wyszło średnio no i trudno. Jak się poduczysz, to wyjdzie lepiej.

1
LukeJL napisał(a):

Kategoria Bazy danych, ale odpiszę tak, jakby to było w dziale Kariera.

Ten post pokazuje bardzo smutną rzeczywistość branży IT. Aplikujesz na stanowisko intelektualne wymagające myślenia w szeroko pojętej branży IT:

Piszę do was po wczorajszym teście rekrutacyjnym na staż na analityka danych (Power BI i te sprawy).

Właśnie obawiam się że niekoniecznie stanowisko intelektualne wymagające myślenia , raczej stanowisko klepacza raportów.
Dziwaczne nazwy stanowisk , nie mające nic wspólnego z tym kogo chcą zatrudnić to prawdziwa plaga ostatnio

0

Jak dla mnie to miałeś mało szczęścia. Jeśli nie miałeś wiedzy o tym, że to inny silnik a nie poczułeś na własnej skórze jakie mogą być różnice to nauka tego w czasie tak napiętego czasu jest słaba. Do tego ta sprawa z Limitem to zawalenie sprawy po stronie rekrutera

Z drugiej strony coś tam wyniosłeś:

  • ogarnij sobie jakiś edytor, który waliduję sładnie zapytania, bo ten średnik to xd
  • proces rekrutacyjny często bywa spierdolony i trzeba improwizować
1

No to jest dobre podsumowanie co tu się w tym IT odjaniepawla

A każą ci robić w ciągu godziny zadania na czas jak w jakimś teleturnieju czy reality show

Jak widzę że rekrutacja będzie tak wyglądać, to wywracam im ten stolik i wychodzę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1