Pytania na rozmowę kwalifikacyjną Data Analyst 2026: Kompletny przewodnik SQL, Python i analityki

Kompleksowy przewodnik po pytaniach rekrutacyjnych dla analityków danych obejmujący funkcje okienkowe SQL, operacje Python pandas, koncepcje statystyczne oraz scenariusze biznesowe zadawane przez firmy w 2026 roku.

Pytania na rozmowę Data Analyst 2026

Pytania rekrutacyjne na stanowisko analityka danych w 2026 roku sprawdzają trzy kluczowe obszary: biegłość w SQL, manipulację danymi w Pythonie oraz rozwiązywanie problemów biznesowych. Firmy takie jak Google, Meta i Amazon ustandaryzowały swoje techniczne rozmowy kwalifikacyjne wokół tych umiejętności, a funkcje okienkowe SQL oraz operacje pandas pojawiają się w ponad 80% wywiadów według raportu trendów rekrutacyjnych Glassdoor 2026.

Na co zwracają uwagę rekruterzy

Najlepsi kandydaci wykazują nie tylko znajomość składni, ale również umiejętność wyjaśnienia swojego podejścia analitycznego. Rekruterzy oceniają, czy kandydat potrafi przełożyć pytanie biznesowe na zapytanie techniczne i przekazać wyniki osobom nietechnicznym.

Funkcje okienkowe SQL: Najczęstszy temat rozmów

Funkcje okienkowe pojawiają się niemal na każdej rozmowie technicznej dla analityków danych. W przeciwieństwie do funkcji agregujących, które zwijają wiersze, funkcje okienkowe wykonują obliczenia na zestawie wierszy powiązanych z bieżącym wierszem, zachowując dane poszczególnych wierszy.

Pytanie: Oblicz wynagrodzenie każdego pracownika jako procent całkowitego wynagrodzenia w jego dziale.

sql
-- employee_salary_percentage.sql
SELECT 
    employee_id,
    department,
    salary,
    -- SUM as window function preserves each row
    ROUND(
        salary * 100.0 / SUM(salary) OVER (PARTITION BY department),
        2
    ) AS pct_of_dept_salary
FROM employees
ORDER BY department, pct_of_dept_salary DESC;

Klauzula PARTITION BY tworzy oddzielne okna dla każdego działu. Wynagrodzenie każdego pracownika dzieli się przez sumę wynagrodzeń w jego dziale, a nie w całej firmie. To rozróżnienie zaskakuje wielu kandydatów, którzy zamiast tego używają podzapytania lub złączenia.

Pytanie: Znajdź sumę bieżącą sprzedaży według daty, resetowaną każdego miesiąca.

sql
-- monthly_running_total.sql
SELECT
    sale_date,
    amount,
    SUM(amount) OVER (
        PARTITION BY DATE_TRUNC('month', sale_date)
        ORDER BY sale_date
        -- Default frame: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS monthly_running_total
FROM sales
ORDER BY sale_date;

Rekruterzy oczekują, że kandydaci znają domyślne zachowanie ramki okna. Bez jawnej klauzuli ROWS lub RANGE ramka rozciąga się od początku partycji do bieżącego wiersza, co daje sumę bieżącą. Przećwicz te wzorce z modułem funkcji okienkowych SQL.

CTE i podzapytania: Organizacja złożonych zapytań

Common Table Expressions sprawiają, że zapytania są czytelne i łatwe w utrzymaniu. Rekruterzy oceniają, czy kandydaci strukturyzują zapytania logicznie, zamiast pisać monolityczne instrukcje.

Pytanie: Znajdź klientów, którzy dokonali zakupów w kolejnych miesiącach.

sql
-- consecutive_month_purchasers.sql
WITH monthly_purchases AS (
    -- Step 1: Get distinct customer-month combinations
    SELECT DISTINCT
        customer_id,
        DATE_TRUNC('month', purchase_date) AS purchase_month
    FROM orders
),
with_prev_month AS (
    -- Step 2: Add previous purchase month for each customer
    SELECT
        customer_id,
        purchase_month,
        LAG(purchase_month) OVER (
            PARTITION BY customer_id 
            ORDER BY purchase_month
        ) AS prev_purchase_month
    FROM monthly_purchases
)
-- Step 3: Filter to consecutive months only
SELECT DISTINCT customer_id
FROM with_prev_month
WHERE purchase_month = prev_purchase_month + INTERVAL '1 month';

Ten wzorzec łączy CTE z funkcją okienkową LAG. Rozbicie zapytania na nazwane kroki demonstruje proces myślowy, który rekruterzy cenią równie wysoko jak poprawną odpowiedź.

Python Pandas: Podstawy manipulacji danymi

Pytania dotyczące pandas testują umiejętności czyszczenia, agregacji i transformacji danych. Rekruterzy przedstawiają nieuporządkowane zbiory danych i proszą kandydatów o wyciągnięcie wniosków.

Pytanie: Mając DataFrame sesji użytkowników, oblicz średni czas trwania sesji według segmentu użytkowników, wykluczając sesje krótsze niż 10 sekund.

python
# session_analysis.py
import pandas as pd

def analyze_sessions(df: pd.DataFrame) -> pd.DataFrame:
    """Calculate average session duration by user segment.
    
    Args:
        df: DataFrame with columns [user_id, segment, session_start, session_end]
    
    Returns:
        DataFrame with average duration per segment
    """
    # Calculate duration in seconds
    df['duration_seconds'] = (
        df['session_end'] - df['session_start']
    ).dt.total_seconds()
    
    # Filter short sessions and aggregate
    return (
        df[df['duration_seconds'] >= 10]
        .groupby('segment')
        .agg(
            avg_duration=('duration_seconds', 'mean'),
            session_count=('user_id', 'count')
        )
        .round(2)
        .reset_index()
    )

Odpowiedź demonstruje łańcuchowanie metod, obsługę datetime oraz funkcję agg z nazwanymi wyjściami. Rekruterzy sprawdzają, czy kandydaci filtrują przed agregacją, a nie po, co zniekształciłoby średnie.

Pytanie: Połącz dwa DataFrames i odpowiednio obsłuż brakujące wartości.

python
# merge_and_clean.py
import pandas as pd
import numpy as np

def merge_user_data(
    users: pd.DataFrame,
    transactions: pd.DataFrame
) -> pd.DataFrame:
    """Merge user demographics with transaction history.
    
    Users without transactions get total_spent = 0.
    Transactions without user data are excluded.
    """
    merged = pd.merge(
        users,
        transactions.groupby('user_id')['amount'].sum().reset_index(),
        on='user_id',
        how='left'  # Keep all users, even without transactions
    )
    
    # Fill NaN for users with no transactions
    merged['amount'] = merged['amount'].fillna(0)
    merged.rename(columns={'amount': 'total_spent'}, inplace=True)
    
    return merged

Parametr how='left' i jawna obsługa fillna pokazują dbałość o przypadki brzegowe. Kandydaci używający how='inner' tracą użytkowników bez transakcji, co zmienia populację analizy.

Gotowy na rozmowy o Data Analytics?

Ćwicz z naszymi interaktywnymi symulatorami, flashcards i testami technicznymi.

Koncepcje statystyczne: Co analitycy muszą jasno wyjaśnić

Pytania statystyczne oceniają, czy kandydaci potrafią zastosować koncepcje do rzeczywistych problemów biznesowych i przekazać wyniki interesariuszom.

Pytanie: Product manager twierdzi, że nowy proces zakupu zwiększył konwersję o 5%. Test trwał tydzień z 10 000 użytkowników na wariant. Czy ten wynik jest statystycznie istotny?

Kompletna odpowiedź odnosi się do wielkości próby, mocy statystycznej i istotności praktycznej:

  1. Oblicz błąd standardowy: Dla wskaźników konwersji SE = sqrt(p(1-p)/n). Przy bazowej konwersji 10% i n=10 000, SE wynosi około 0,003.

  2. Oblicz z-score: 5% względny wzrost oznacza, że nowa konwersja wynosi 10,5%. Różnica 0,5 punktu procentowego podzielona przez połączony SE określa istotność.

  3. Rozważ istotność praktyczną: Nawet jeśli p < 0,05, wzrost o 0,5 punktu procentowego może nie uzasadniać kosztów inżynieryjnych nowego procesu.

  4. Sprawdź czynniki zakłócające: Tydzień uwzględnia wzorce weekendowe vs. dzień powszedni, ale może pominąć cykle miesięczne lub efekty sezonowe.

Rekruterzy cenią kandydatów, którzy kwestionują założenia, zamiast mechanicznie obliczać wartości p. Moduł zasad wizualizacji danych obejmuje prezentowanie tych wyników.

Pytanie: Wyjaśnij różnicę między korelacją a przyczynowością na przykładzie biznesowym.

Sprzedaż lodów i przypadki utonięć są pozytywnie skorelowane. Oba rosną latem z powodu zmiennej zakłócającej, jaką jest temperatura. Rekomendowanie ograniczenia produkcji lodów w celu zapobiegania utonięciom myli korelację z przyczynowością.

W analityce biznesowej: wydatki na reklamę i przychody często korelują, ale związek może odzwierciedlać to, że firmy zwiększają wydatki reklamowe, gdy prognozy przychodów są już mocne, a nie że reklamy generują przychód. Ustalenie przyczynowości wymaga kontrolowanych eksperymentów lub technik wnioskowania przyczynowego, takich jak różnica w różnicach.

Pytania biznesowe: Przekładanie problemów na zapytania

Pytania case'owe testują zdolność rozkładania niejednoznacznych problemów biznesowych na konkretne kroki analityczne.

Pytanie: Retencja użytkowników spadła o 15% w zeszłym miesiącu. Jak przeprowadziłbyś dochodzenie?

Ustrukturyzowane podejście:

  1. Zwaliduj metrykę: Potwierdź, że definicja retencji odpowiada historycznym obliczeniom. Sprawdź problemy z pipeline'em danych lub zmiany w śledzeniu.

  2. Zsegmentuj spadek: Podziel retencję według kohorty użytkowników, kanału pozyskania, typu urządzenia i geografii. 15% ogólny spadek może być 50% spadkiem w jednym segmencie maskującym stabilność gdzie indziej.

  3. Zidentyfikuj timing: Czy retencja spadła stopniowo czy nagle? Nagły spadek sugeruje zmianę w produkcie lub błąd. Stopniowy spadek wskazuje na czynniki rynkowe lub konkurencyjne.

  4. Skoreluj ze zdarzeniami: Dopasuj oś czasu do wydań produktu, kampanii marketingowych, premier konkurencji i zdarzeń zewnętrznych.

  5. Sformułuj hipotezy: Na podstawie wzorców segmentacji zaproponuj testowalne wyjaśnienia i dane potrzebne do potwierdzenia lub odrzucenia każdego z nich.

sql
-- retention_by_cohort.sql
WITH user_cohorts AS (
    SELECT
        user_id,
        DATE_TRUNC('week', created_at) AS cohort_week
    FROM users
),
weekly_activity AS (
    SELECT
        user_id,
        DATE_TRUNC('week', activity_date) AS activity_week
    FROM user_events
)
SELECT
    c.cohort_week,
    a.activity_week,
    COUNT(DISTINCT a.user_id) AS active_users,
    COUNT(DISTINCT c.user_id) AS cohort_size,
    ROUND(
        COUNT(DISTINCT a.user_id) * 100.0 / COUNT(DISTINCT c.user_id),
        1
    ) AS retention_pct
FROM user_cohorts c
LEFT JOIN weekly_activity a 
    ON c.user_id = a.user_id 
    AND a.activity_week >= c.cohort_week
GROUP BY c.cohort_week, a.activity_week
ORDER BY c.cohort_week, a.activity_week;

To zapytanie analizy kohortowej dostarcza dane potrzebne dla kroku 2. Moduł retencji kohortowej obejmuje warianty tego wzorca.

Zadania do domu: Co oceniają ewaluatorzy

Wiele firm dołącza zadania do domu trwające od 2 do 4 godzin. Ewaluatorzy oceniają zgłoszenia pod kątem jakości kodu, rygoru analitycznego i komunikacji.

Typowe zadanie: Mając zbiór danych transakcji e-commerce, zidentyfikuj czynniki przewidujące odejście klientów.

Mocne zgłoszenia mają wspólne cechy:

  • Najpierw analiza eksploracyjna: Statystyki opisowe, wykresy rozkładu i ocena brakujących wartości przed modelowaniem
  • Inżynieria cech: Tworzenie istotnych cech jak recency, frequency, monetary value (RFM) oraz wskaźniki trendów
  • Uzasadnienie wyboru modelu: Wyjaśnienie dlaczego regresja logistyczna lub las losowy pasuje do problemu, a nie tylko uruchamianie domyślnych ustawień
  • Podejście do walidacji: Używanie podziałów opartych na czasie zamiast losowych, aby uniknąć wycieku danych
  • Jasna komunikacja: Podsumowanie wykonawcze na początku, szczegóły techniczne w załączniku, wizualizacje wspierające wnioski
python
# churn_analysis_structure.py
import pandas as pd
from sklearn.model_selection import TimeSeriesSplit
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import precision_recall_curve, auc

def create_rfm_features(df: pd.DataFrame, analysis_date: str) -> pd.DataFrame:
    """Create Recency, Frequency, Monetary features per customer."""
    analysis_dt = pd.to_datetime(analysis_date)
    
    rfm = df.groupby('customer_id').agg(
        recency=('order_date', lambda x: (analysis_dt - x.max()).days),
        frequency=('order_id', 'nunique'),
        monetary=('order_total', 'sum')
    ).reset_index()
    
    return rfm

def evaluate_with_time_split(
    X: pd.DataFrame, 
    y: pd.Series,
    n_splits: int = 5
) -> list:
    """Evaluate model using time-based cross-validation."""
    tscv = TimeSeriesSplit(n_splits=n_splits)
    scores = []
    
    for train_idx, val_idx in tscv.split(X):
        model = RandomForestClassifier(n_estimators=100, random_state=42)
        model.fit(X.iloc[train_idx], y.iloc[train_idx])
        
        y_pred_proba = model.predict_proba(X.iloc[val_idx])[:, 1]
        precision, recall, _ = precision_recall_curve(y.iloc[val_idx], y_pred_proba)
        scores.append(auc(recall, precision))
    
    return scores

Kod demonstruje inżynierię cech istotną dla domeny oraz odpowiednią metodologię walidacji dla danych szeregów czasowych.

Kluczowe wnioski dla rozmów Data Analyst w 2026

  • Funkcje okienkowe SQL z PARTITION BY i ORDER BY pojawiają się na większości rozmów technicznych. Ćwicz obliczanie sum bieżących, procentów i rankingów.

  • Pytania Python pandas kładą nacisk na łańcuchowanie metod, agregacje groupby i operacje merge z właściwą obsługą brakujących wartości.

  • Pytania statystyczne wymagają wyjaśniania koncepcji w terminach biznesowych. Rekruterzy oceniają zdolność komunikacji, nie tylko wiedzę techniczną.

  • Pytania biznesowe testują ustrukturyzowane rozkładanie problemów. Zacznij od walidacji metryki, następnie zsegmentuj, aby wyizolować problem.

  • Zadania do domu są oceniane pod kątem jakości kodu i komunikacji w równym stopniu co dokładności analitycznej. Dołącz podsumowanie wykonawcze i wyjaśnij swoje wybory.

  • Moduł BigQuery zaawansowany oraz Python pandas podstawy dostarczają dodatkowe pytania ćwiczeniowe zgodne z aktualnymi wzorcami rozmów.

Zacznij ćwiczyć!

Sprawdź swoją wiedzę z naszymi symulatorami rozmów i testami technicznymi.

Wyzwanie dnia

Znajdziesz błąd w Data Analytics?

Prawdziwy fragment kodu, ukryty błąd, jedna próba dziennie. Bez konta, żeby spróbować.

Anthony Fillion-Maillet

Autor:

Anthony Fillion-Maillet

Założyciel SharpSkill

Programista fullstack od ponad 10 lat. Prowadzi SharpSkill i odpowiada za wszystko, co się tu ukazuje.

Zaktualizowano 8 września 2026

Tagi

#data-analytics
#sql
#python
#pandas
#interview

Udostępnij

Powiązane artykuły