Day 3 - Basics: Grouping
Bối cảnh: Hệ thống E-commerce (Thương mại điện tử)
1. Today's plan
Hôm nay, chúng ta sẽ học cách nhóm dữ liệu và sử dụng các hàm tổng hợp để phân tích dữ liệu trong hệ thống E-commerce.
Các chủ đề chính:
Aggregate functions: Các hàm tổng hợp như COUNT, SUM, AVG, MIN, MAX.
GROUP BY: Nhóm dữ liệu theo một hoặc nhiều cột.
HAVING: Lọc dữ liệu sau khi nhóm.
2. Aggregate functions
Các hàm tổng hợp phổ biến:
COUNT(): Đếm số lượng bản ghi.
SUM(): Tính tổng giá trị.
AVG(): Tính giá trị trung bình.
MIN(): Tìm giá trị nhỏ nhất.
MAX(): Tìm giá trị lớn nhất.
Ví dụ:
SELECT COUNT(*) AS total_orders FROM orders;
Câu lệnh này sẽ trả về tổng số đơn hàng trong bảng orders.
3. Challenge: Aggregate function
- Yêu cầu: Viết truy vấn để tính tổng giá trị (total_amount) của tất cả đơn hàng trong bảng orders.
4. Solution: Aggregate function
Giải pháp:
SELECT SUM(total_amount) AS total_revenue FROM orders;
5. GROUP BY
GROUP BY dùng để nhóm dữ liệu theo một hoặc nhiều cột.
Ví dụ:
SELECT category, COUNT(*) AS product_count FROM products GROUP BY category;
Câu lệnh này sẽ trả về số lượng sản phẩm trong mỗi danh mục.
6. Challenge: GROUP BY
- Yêu cầu: Viết truy vấn để tính tổng giá trị (total_amount) của các đơn hàng theo từng phương thức thanh toán (payment_method) trong bảng orders.
7. Solution: GROUP BY
Giải pháp:
SELECT payment_method, SUM(total_amount) AS total_revenue FROM orders GROUP BY payment_method;
8. GROUP BY multiple columns
GROUP BY có thể nhóm dữ liệu theo nhiều cột.
Ví dụ:
SELECT category, supplier, COUNT(*) AS product_count FROM products GROUP BY category, supplier;
Câu lệnh này sẽ trả về số lượng sản phẩm trong mỗi danh mục và nhà cung cấp.
9. Challenge: GROUP BY multiple columns
- Yêu cầu: Viết truy vấn để tính tổng giá trị (total_amount) của các đơn hàng theo từng phương thức thanh toán (payment_method) và năm đặt hàng (order_date) trong bảng orders.
10. Solution: GROUP BY multiple columns
Giải pháp:
SELECT payment_method, EXTRACT(YEAR FROM order_date) AS order_year, SUM(total_amount) AS total_revenue FROM orders GROUP BY payment_method, EXTRACT(YEAR FROM order_date);
11. HAVING
HAVING dùng để lọc dữ liệu sau khi nhóm.
Ví dụ:
SELECT category, COUNT(*) AS product_count FROM products GROUP BY category HAVING COUNT(*) > 10;
Câu lệnh này sẽ trả về các danh mục có số lượng sản phẩm lớn hơn 10.
12. Challenge: HAVING
- Yêu cầu: Viết truy vấn để tìm các phương thức thanh toán (payment_method) có tổng giá trị đơn hàng (total_amount) lớn hơn 1000 trong bảng orders.
13. Solution: HAVING
Giải pháp:
SELECT payment_method, SUM(total_amount) AS total_revenue FROM orders GROUP BY payment_method HAVING SUM(total_amount) > 1000;
14. Introducing the second project
Giới thiệu dự án thứ hai: Phân tích doanh thu theo danh mục sản phẩm.
Bạn sẽ sử dụng các kiến thức đã học để phân tích doanh thu từ các danh mục sản phẩm khác nhau.
15. Note for Mac users
Nếu bạn sử dụng Mac, hãy đảm bảo rằng PostgreSQL và pgAdmin đã được cài đặt và cấu hình đúng cách.
Nếu gặp vấn đề, hãy tham khảo lại hướng dẫn cài đặt trong Day 1.
16. Important: Problems & solutions of setting up the database
Một số vấn đề thường gặp khi thiết lập database:
Lỗi kết nối: Kiểm tra lại thông tin đăng nhập và cổng kết nối.
Chậm hiệu năng: Đóng các ứng dụng không cần thiết và tăng bộ nhớ RAM.
Lỗi cú pháp: Kiểm tra lại câu lệnh SQL và đảm bảo rằng các bảng và cột đã được tạo đúng cách.
17. Today's summary
Hôm nay, bạn đã học:
Cách sử dụng các hàm tổng hợp như COUNT, SUM, AVG, MIN, và MAX.
Cách nhóm dữ liệu với GROUP BY.
Cách lọc dữ liệu sau khi nhóm với HAVING.
Hẹn gặp lại bạn vào ngày 4 với chủ đề Intermediate: Functions!
18. Today's challenges
Thử thách 1: Viết truy vấn để tính số lượng đơn hàng (order_count) và tổng giá trị (total_revenue) của các đơn hàng theo từng khách hàng (customer_id) trong bảng orders.
Thử thách 2: Viết truy vấn để tìm các danh mục sản phẩm (category) có số lượng sản phẩm (product_count) lớn hơn 5 trong bảng products.
Thử thách 3: Viết truy vấn để tính giá trung bình (average_price) của các sản phẩm theo từng danh mục (category) trong bảng products.