SQL nâng cao: Phân tích kết quả học tập¶
🟠 Quan trọng · SQL
Bảng dữ liệu¶
students(student_id, name, class)scores(student_id, subject, score)
Query mẫu¶
WITH student_avg AS (
SELECT student_id,
AVG(score) AS avg_score,
COUNT(DISTINCT subject) AS num_subjects
FROM scores
GROUP BY student_id
),
ranked AS (
SELECT s.student_id, s.name, s.class,
sa.avg_score, sa.num_subjects,
RANK() OVER (ORDER BY sa.avg_score DESC) AS overall_rank,
RANK() OVER (
PARTITION BY s.class ORDER BY sa.avg_score DESC
) AS class_rank
FROM students s
JOIN student_avg sa ON s.student_id = sa.student_id
)
SELECT * FROM ranked;
Kỹ thuật chính¶
- CTE tách từng bước (dễ đọc, dễ debug)
- Window Function xếp hạng tổng thể và theo lớp
- JOIN kết hợp thông tin
💡 Tip¶
Khi phỏng vấn, hãy hỏi rõ output mong muốn trước khi viết query. Điều này thể hiện tư duy phân tích.