30 ngày, 4 chặng
Mỗi ngày một chủ đề, có ôn tập sau mỗi chặng. Bài nào cũng ghi rõ cần học gì trước.
Khóa học của HCMUTE Developer Student Club. Một hệ quản trị (PostgreSQL 16), một bộ dữ liệu chung, mọi ví dụ đều chạy được và mọi bài tập đều có đáp án.
SELECT c.name AS danh_muc,
SUM(oi.quantity * oi.unit_price
* (1 - oi.discount)) AS doanh_thu
FROM order_items oi
JOIN orders o USING (order_id)
JOIN products p USING (product_id)
JOIN categories c USING (category_id)
WHERE o.status NOT IN ('pending', 'cancelled')
GROUP BY c.name
ORDER BY doanh_thu DESC
LIMIT 3;| danh_muc | doanh_thu |
|---|---|
| Điện thoại | 135.492.500 |
| Laptop gaming | 135.151.000 |
| Laptop văn phòng | 104.700.500 |
Cần cài sẵn Docker Desktop. Không dùng Docker? Xem cách cài PostgreSQL trực tiếp.
git clone https://github.com/hcmute-dsc/sql-challenge.git
cd sql-challengedocker compose up -ddocker compose exec db psql -U postgres -d sql_challenge
# hoặc Adminer: http://localhost:8080Học theo thứ tự, mỗi ngày một bài. Bắt đầu từ lộ trình tổng quan, kết thúc bằng dự án cuối khóa.
Một cửa hàng đồ công nghệ với 7 bảng, dùng xuyên suốt 30 ngày. Dữ liệu cố ý có NULL, tên thành phố viết lộn xộn, khách trùng tên, khách chưa mua lần nào, để bạn gặp đúng những cái bẫy của dữ liệu thật.
categoriesDanh mục dạng câyproductsSản phẩm, thông số JSONBcustomersKhách hàng, có NULLemployeesNhân viên dạng câyorders40 đơn, 01/2025 đến 10/2026order_itemsDòng hàng của đơnpaymentsThanh toán, có trả góp

Dự án cuối khóa: thiết kế ERD, dựng schema chuẩn 3NF, viết truy vấn báo cáo, transaction, view, trigger, tối ưu bằng EXPLAIN và một API nhỏ an toàn trước SQL injection. Chấm theo rubric 100 điểm.
Xem đề dự án