คำถามสัมภาษณ์ Data Analyst 2026: คู่มือครบถ้วน SQL, Python และ Analytics
คู่มือครบถ้วนสำหรับคำถามสัมภาษณ์ data analyst 2026 ครอบคลุม SQL window functions, Python pandas, แนวคิดสถิติ และ business case study พร้อมตัวอย่างโค้ดจริง

คำถามสัมภาษณ์ data analyst ในปี 2026 ทดสอบสามด้านหลัก: ความชำนาญใน SQL การจัดการข้อมูลด้วย Python และการแก้ปัญหาทางธุรกิจ บริษัทอย่าง Google, Meta และ Amazon ได้กำหนดมาตรฐานการคัดกรองทางเทคนิคของตนตามทักษะเหล่านี้ โดย SQL window functions และการดำเนินการ pandas ปรากฏในการสัมภาษณ์มากกว่า 80% ตาม รายงานแนวโน้มการจ้างงานของ Glassdoor 2026
ผู้สมัครที่โดดเด่นที่สุดแสดงให้เห็นไม่เพียงแค่ความรู้ด้าน syntax แต่ยังรวมถึงความสามารถในการอธิบายแนวทางการวิเคราะห์ของตน ผู้สัมภาษณ์ประเมินว่าผู้สมัครสามารถแปลคำถามทางธุรกิจเป็น query ทางเทคนิคและสื่อสารผลการค้นพบกับผู้มีส่วนได้ส่วนเสียที่ไม่ใช่ฝ่ายเทคนิคได้หรือไม่
SQL Window Functions: หัวข้อสัมภาษณ์ที่พบบ่อยที่สุด
Window functions ปรากฏในการคัดกรองทางเทคนิคของ data analyst เกือบทุกครั้ง ต่างจาก aggregate functions ที่รวมแถวเข้าด้วยกัน window functions ทำการคำนวณข้ามชุดของแถวที่เกี่ยวข้องกับแถวปัจจุบันในขณะที่ยังคงรักษาข้อมูลของแต่ละแถวไว้
คำถาม: คำนวณเงินเดือนของพนักงานแต่ละคนเป็นเปอร์เซ็นต์ของเงินเดือนรวมของแผนก
-- 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;ประโยค PARTITION BY สร้าง window แยกต่างหากสำหรับแต่ละแผนก เงินเดือนของพนักงานแต่ละคนถูกหารด้วยยอดรวมของแผนกตน ไม่ใช่ยอดรวมของบริษัท ความแตกต่างนี้มักจะดักผู้สมัครที่ใช้ subquery หรือ join แทน
คำถาม: หา running total ของยอดขายตามวันที่ โดยรีเซ็ตทุกเดือน
-- 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;ผู้สัมภาษณ์คาดหวังให้ผู้สมัครรู้พฤติกรรมเริ่มต้นของ window frame หากไม่มีประโยค ROWS หรือ RANGE ที่ชัดเจน frame จะขยายจากจุดเริ่มต้นของ partition ไปจนถึงแถวปัจจุบัน ซึ่งสร้าง running total ฝึกฝน pattern เหล่านี้กับ โมดูล SQL window functions
CTEs และ Subqueries: การจัดระเบียบ Query ที่ซับซ้อน
Common Table Expressions ทำให้ query อ่านง่ายและบำรุงรักษาได้ ผู้สัมภาษณ์ประเมินว่าผู้สมัครจัดโครงสร้าง query อย่างมีตรรกะหรือเขียนคำสั่งแบบ monolithic
คำถาม: หาลูกค้าที่ทำการซื้อในเดือนติดต่อกัน
-- 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';Pattern นี้รวม CTEs กับ window function LAG การแบ่ง query เป็นขั้นตอนที่มีชื่อแสดงให้เห็นกระบวนการคิด ซึ่งผู้สัมภาษณ์ให้คุณค่าเท่ากับคำตอบที่ถูกต้อง
Python Pandas: พื้นฐานการจัดการข้อมูล
คำถาม Pandas ทดสอบทักษะการทำความสะอาดข้อมูล การรวม และการแปลง ผู้สัมภาษณ์นำเสนอ dataset ที่ยุ่งเหยิงและขอให้ผู้สมัครดึง insight ออกมา
คำถาม: จาก DataFrame ของ session ผู้ใช้ คำนวณระยะเวลา session เฉลี่ยตามกลุ่มผู้ใช้ โดยไม่รวม session ที่สั้นกว่า 10 วินาที
# 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()
)คำตอบแสดงให้เห็น method chaining การจัดการ datetime และฟังก์ชัน agg พร้อม output ที่มีชื่อ ผู้สัมภาษณ์ตรวจสอบว่าผู้สมัครกรองก่อนการรวมไม่ใช่หลัง ซึ่งจะทำให้ค่าเฉลี่ยเบี่ยงเบน
คำถาม: รวมสอง DataFrame และจัดการค่าที่หายไปอย่างเหมาะสม
# 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พารามิเตอร์ how='left' และการจัดการ fillna ที่ชัดเจนแสดงให้เห็นความใส่ใจใน edge cases ผู้สมัครที่ใช้ how='inner' จะสูญเสียผู้ใช้ที่ไม่มีธุรกรรม ซึ่งเปลี่ยนประชากรการวิเคราะห์
พร้อมที่จะพิชิตการสัมภาษณ์ Data Analytics แล้วหรือยังครับ?
ฝึกฝนด้วยตัวจำลองแบบโต้ตอบ, flashcards และแบบทดสอบเทคนิคครับ
แนวคิดสถิติ: สิ่งที่ Analyst ต้องอธิบายได้ชัดเจน
คำถามสถิติประเมินว่าผู้สมัครสามารถนำแนวคิดไปใช้กับปัญหาทางธุรกิจจริงและสื่อสารผลการค้นพบกับผู้มีส่วนได้ส่วนเสียได้หรือไม่
คำถาม: Product manager อ้างว่า checkout flow ใหม่เพิ่ม conversion 5% การทดสอบดำเนินเป็นเวลาหนึ่งสัปดาห์กับผู้ใช้ 10,000 คนต่อ variant ผลลัพธ์นี้มีนัยสำคัญทางสถิติหรือไม่?
คำตอบที่สมบูรณ์กล่าวถึงขนาดตัวอย่าง statistical power และ practical significance:
-
คำนวณ standard error: สำหรับอัตรา conversion SE = sqrt(p(1-p)/n) ด้วย conversion baseline 10% และ n=10,000 SE ประมาณ 0.003
-
คำนวณ z-score: การเพิ่มขึ้น 5% แบบสัมพัทธ์หมายความว่า conversion ใหม่คือ 10.5% ความแตกต่าง 0.5 จุดเปอร์เซ็นต์หารด้วย pooled SE กำหนดนัยสำคัญ
-
พิจารณา practical significance: แม้ว่า p < 0.05 การเพิ่มขึ้น 0.5 จุดเปอร์เซ็นต์อาจไม่คุ้มกับต้นทุนวิศวกรรมของ flow ใหม่
-
ตรวจสอบ confounds: หนึ่งสัปดาห์ครอบคลุม pattern สุดสัปดาห์เทียบกับวันธรรมดา แต่อาจพลาดรอบรายเดือนหรือผลกระทบตามฤดูกาล
ผู้สัมภาษณ์ให้คุณค่ากับผู้สมัครที่ตั้งคำถามกับสมมติฐานมากกว่าคำนวณ p-value แบบกลไก โมดูลหลักการ data visualization ครอบคลุมวิธีการนำเสนอผลการค้นพบเหล่านี้
คำถาม: อธิบายความแตกต่างระหว่าง correlation และ causation พร้อมตัวอย่างทางธุรกิจ
ยอดขายไอศกรีมและการเสียชีวิตจากการจมน้ำมี correlation เป็นบวก ทั้งสองเพิ่มขึ้นในฤดูร้อนเนื่องจากตัวแปร confounding คืออุณหภูมิ การแนะนำให้ลดการผลิตไอศกรีมเพื่อป้องกันการจมน้ำเป็นการเข้าใจผิดว่า correlation คือ causation
ในการวิเคราะห์ธุรกิจ: ค่าใช้จ่ายโฆษณาและรายได้มักมี correlation แต่ความสัมพันธ์อาจสะท้อนว่าบริษัทเพิ่มค่าใช้จ่ายโฆษณาเมื่อการคาดการณ์รายได้แข็งแกร่งอยู่แล้ว ไม่ใช่ว่าโฆษณาขับเคลื่อนรายได้ การสร้าง causation ต้องใช้การทดลองที่ควบคุมหรือเทคนิค causal inference เช่น difference-in-differences
คำถาม Business Case: แปลปัญหาเป็น Query
คำถาม case study ทดสอบความสามารถในการแยกปัญหาทางธุรกิจที่คลุมเครือเป็นขั้นตอนการวิเคราะห์ที่เป็นรูปธรรม
คำถาม: User retention ลดลง 15% เมื่อเดือนที่แล้ว จะสืบสวนอย่างไร?
แนวทางที่มีโครงสร้าง:
-
ตรวจสอบ metric: ยืนยันว่าคำจำกัดความของ retention ตรงกับการคำนวณในอดีต ตรวจสอบปัญหา data pipeline หรือการเปลี่ยนแปลง tracking
-
แบ่งกลุ่มการลดลง: แยก retention ตาม cohort ผู้ใช้ ช่องทางการได้มา ประเภทอุปกรณ์ และภูมิศาสตร์ การลดลง 15% โดยรวมอาจเป็นการลดลง 50% ในกลุ่มเดียวที่ปกปิดความมั่นคงในที่อื่น
-
ระบุเวลา: retention ลดลงทีละน้อยหรือกะทันหัน? การลดลงอย่างกะทันหันบ่งบอกถึงการเปลี่ยนแปลงผลิตภัณฑ์หรือ bug การลดลงทีละน้อยชี้ไปที่ปัจจัยตลาดหรือการแข่งขัน
-
เชื่อมโยงกับเหตุการณ์: จัดแนว timeline กับการเปิดตัวผลิตภัณฑ์ แคมเปญการตลาด การเปิดตัวของคู่แข่ง และเหตุการณ์ภายนอก
-
สร้างสมมติฐาน: จาก pattern การแบ่งกลุ่ม เสนอคำอธิบายที่ทดสอบได้และข้อมูลที่จำเป็นเพื่อยืนยันหรือปฏิเสธแต่ละข้อ
-- 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;Query การวิเคราะห์ cohort นี้สร้างข้อมูลที่จำเป็นสำหรับขั้นตอนที่ 2 โมดูล cohort retention ครอบคลุมรูปแบบต่างๆ ของ pattern นี้
Take-Home Assignments: สิ่งที่ผู้ประเมินพิจารณา
หลายบริษัทรวม take-home assignments ที่ใช้เวลา 2 ถึง 4 ชั่วโมง ผู้ประเมินให้คะแนนงานที่ส่งตามคุณภาพโค้ด ความเข้มงวดในการวิเคราะห์ และการสื่อสาร
Assignment ทั่วไป: จาก dataset ธุรกรรม e-commerce ระบุปัจจัยที่ทำนาย customer churn
งานที่ส่งที่แข็งแกร่งมีลักษณะดังนี้:
- การวิเคราะห์เชิงสำรวจก่อน: สถิติสรุป กราฟการกระจาย และการประเมินค่าที่หายไปก่อนการ modeling
- Feature engineering: สร้าง features ที่เกี่ยวข้องเช่น recency, frequency, monetary value (RFM) และตัวบ่งชี้แนวโน้ม
- เหตุผลการเลือก model: อธิบายว่าทำไม logistic regression หรือ random forest เหมาะกับปัญหา ไม่ใช่แค่รันค่าเริ่มต้น
- แนวทาง validation: ใช้ time-based splits แทน random splits เพื่อหลีกเลี่ยง data leakage
- การสื่อสารที่ชัดเจน: สรุปผู้บริหารที่ด้านบน รายละเอียดทางเทคนิคในภาคผนวก visualizations ที่สนับสนุนข้อสรุป
# 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โค้ดแสดงให้เห็น feature engineering ที่เกี่ยวข้องกับ domain และวิธีการ validation ที่เหมาะสมสำหรับข้อมูล time-series
ประเด็นสำคัญสำหรับการสัมภาษณ์ Data Analyst ในปี 2026
-
SQL window functions พร้อม
PARTITION BYและORDER BYปรากฏในการคัดกรองทางเทคนิคส่วนใหญ่ ฝึกฝนการคำนวณ running totals เปอร์เซ็นต์ และการจัดอันดับ -
คำถาม Python pandas เน้น method chaining, groupby aggregations และ merge operations พร้อมการจัดการค่าที่หายไปอย่างเหมาะสม
-
คำถามสถิติต้องการการอธิบายแนวคิดในแง่ธุรกิจ ผู้สัมภาษณ์ประเมินความสามารถในการสื่อสาร ไม่ใช่แค่ความรู้ทางเทคนิค
-
คำถาม business case ทดสอบการแยกปัญหาอย่างมีโครงสร้าง เริ่มด้วยการตรวจสอบ metric แล้วแบ่งกลุ่มเพื่อแยกปัญหา
-
Take-home assignments ได้รับคะแนนจากคุณภาพโค้ดและการสื่อสารเท่ากับความถูกต้องในการวิเคราะห์ รวมสรุปผู้บริหารและอธิบายตัวเลือกของตน
-
โมดูล BigQuery ขั้นสูง และ โมดูลพื้นฐาน Python pandas มีคำถามฝึกฝนเพิ่มเติมที่สอดคล้องกับ pattern การสัมภาษณ์ปัจจุบัน
เริ่มฝึกซ้อมเลย!
ทดสอบความรู้ของคุณด้วยตัวจำลองสัมภาษณ์และแบบทดสอบเทคนิคครับ
คุณหาบั๊กใน Data Analytics เจอไหม
โค้ดจริงหนึ่งชิ้น บั๊กที่ซ่อนอยู่หนึ่งจุด วันละหนึ่งครั้ง ลองได้โดยไม่ต้องมีบัญชี

เขียนโดย
Anthony Fillion-Mailletผู้ก่อตั้ง SharpSkill
เป็นนักพัฒนาฟูลสแตกมากว่า 10 ปี ดูแล SharpSkill และรับผิดชอบทุกสิ่งที่เผยแพร่ที่นี่
อัปเดตเมื่อ 8 กันยายน 2569
แท็ก
แชร์
บทความที่เกี่ยวข้อง

Top 25 คำถามสัมภาษณ์งาน Data Analytics ที่พบบ่อยที่สุดในปี 2026
เตรียมพร้อมสำหรับคำถามสัมภาษณ์ Data Analytics ในปี 2026 ครอบคลุม SQL, Python พร้อม pandas 3.0 Copy-on-Write, Power BI Direct Lake, สถิติ และคำถามเชิงพฤติกรรม พร้อมคำตอบโดยละเอียดและตัวอย่างโค้ด

Pandas 3.0 ในปี 2026: API ใหม่, Breaking Changes และคำถามสัมภาษณ์งาน
คู่มือฉบับสมบูรณ์เกี่ยวกับ Pandas 3.0 ครอบคลุม Copy-on-Write, PyArrow string backend, pd.col() expressions, breaking changes และคำถามสัมภาษณ์ data analytics

SQL สำหรับ Data Analyst: Window Functions, CTEs และ Advanced Queries ฉบับสมบูรณ์
คู่มือ SQL ขั้นสูงสำหรับ Data Analyst ครอบคลุม Window Functions, CTEs, Recursive CTEs และเทคนิค Gaps-and-Islands พร้อมตัวอย่างโค้ดที่ใช้ได้จริง