Day 5 - Intermediate: Conditional Expressions
Bối cảnh: Hệ thống E-commerce (Thương mại điện tử)
1. Mathematical functions and operators
Các hàm và toán tử toán học phổ biến trong SQL:
+: Cộng.
-: Trừ.
*: Nhân.
/: Chia.
%: Chia lấy dư.
ABS(): Giá trị tuyệt đối.
ROUND(): Làm tròn số.
Ví dụ:
SELECT product_name, price, ROUND(price * 0.9, 2) AS discounted_price FROM products;
Câu lệnh này sẽ trả về tên sản phẩm, giá gốc và giá sau khi giảm 10%.
2. Challenge: Mathematical functions and operators
- Yêu cầu: Viết truy vấn để tính tổng giá trị đơn hàng (total_amount) sau khi áp dụng thuế 8% từ bảng orders.
3. Solution: Mathematical functions and operators
Giải pháp:
SELECT order_id, total_amount, ROUND(total_amount * 1.08, 2) AS total_with_tax FROM orders;
4. CASE WHEN - Theory
CASE WHEN dùng để thực hiện các phép kiểm tra điều kiện và trả về giá trị tương ứng.
Cú pháp:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default_result END
Ví dụ:
SELECT product_name, price, CASE WHEN price > 100 THEN 'Expensive' WHEN price BETWEEN 50 AND 100 THEN 'Moderate' ELSE 'Cheap' END AS price_category FROM products;
Câu lệnh này sẽ phân loại sản phẩm thành "Expensive", "Moderate", hoặc "Cheap" dựa trên giá.
5. CASE WHEN - Hands-on
Thực hành sử dụng CASE WHEN để phân loại đơn hàng:
SELECT order_id, total_amount, CASE WHEN total_amount > 500 THEN 'High Value' WHEN total_amount BETWEEN 200 AND 500 THEN 'Medium Value' ELSE 'Low Value' END AS order_category FROM orders;
6. Challenge: CASE WHEN
Yêu cầu: Viết truy vấn để phân loại khách hàng thành "VIP", "Regular", hoặc "New" dựa trên số lượng đơn hàng (order_count) từ bảng customers.
VIP: order_count > 10
Regular: order_count BETWEEN 5 AND 10
New: order_count < 5
7. Solution: CASE WHEN
Giải pháp:
SELECT customer_id, customer_name, order_count, CASE WHEN order_count > 10 THEN 'VIP' WHEN order_count BETWEEN 5 AND 10 THEN 'Regular' ELSE 'New' END AS customer_category FROM customers;
8. CASE WHEN & SUM
Kết hợp CASE WHEN với SUM để tính toán có điều kiện.
Ví dụ:
SELECT SUM(CASE WHEN payment_method = 'Credit Card' THEN total_amount ELSE 0 END) AS credit_card_revenue, SUM(CASE WHEN payment_method = 'PayPal' THEN total_amount ELSE 0 END) AS paypal_revenue FROM orders;
Câu lệnh này sẽ tính tổng doanh thu từ các phương thức thanh toán khác nhau.
9. Challenge: CASE WHEN & SUM
- Yêu cầu: Viết truy vấn để tính tổng doanh thu từ các danh mục sản phẩm (category) trong bảng orders.
10. Solution: CASE WHEN & SUM
Giải pháp:
SELECT SUM(CASE WHEN category = 'Electronics' THEN total_amount ELSE 0 END) AS electronics_revenue, SUM(CASE WHEN category = 'Clothing' THEN total_amount ELSE 0 END) AS clothing_revenue, SUM(CASE WHEN category = 'Home Appliances' THEN total_amount ELSE 0 END) AS home_appliances_revenue FROM orders;
11. COALESCE
COALESCE: Trả về giá trị đầu tiên không phải NULL trong danh sách.
Ví dụ:
SELECT customer_name, COALESCE(email, 'No Email') AS customer_email FROM customers;
Câu lệnh này sẽ trả về email của khách hàng, nếu email là NULL thì trả về 'No Email'.
12. Challenge: COALESCE
- Yêu cầu: Viết truy vấn để lấy tên sản phẩm (product_name) và mô tả sản phẩm (description). Nếu mô tả là NULL, hãy trả về 'No Description' từ bảng products.
13. Solution: COALESCE
Giải pháp:
SELECT product_name, COALESCE(description, 'No Description') AS product_description FROM products;
14. CAST
CAST: Chuyển đổi kiểu dữ liệu của một cột.
Ví dụ:
SELECT order_id, CAST(total_amount AS INTEGER) AS total_amount_int FROM orders;
Câu lệnh này sẽ chuyển đổi cột total_amount từ kiểu số thập phân sang kiểu số nguyên.
15. Challenge: CAST & COALESCE
- Yêu cầu: Viết truy vấn để lấy ngày đặt hàng (order_date) và chuyển đổi thành kiểu chuỗi (VARCHAR). Nếu ngày đặt hàng là NULL, hãy trả về 'No Date' từ bảng orders.
16. Solution: CAST & COALESCE
Giải pháp:
SELECT order_id, COALESCE(CAST(order_date AS VARCHAR), 'No Date') AS order_date_str FROM orders;
17. REPLACE
REPLACE: Thay thế một chuỗi con bằng chuỗi khác.
Ví dụ:
SELECT product_name, REPLACE(product_name, 'Old', 'New') AS updated_name FROM products;
Câu lệnh này sẽ thay thế từ "Old" bằng "New" trong tên sản phẩm.
18. Today's slides
Tổng kết lại các hàm và biểu thức điều kiện đã học trong ngày hôm nay.
Cung cấp slide tham khảo để bạn ôn tập và thực hành thêm.
19. Today's summary
Hôm nay, bạn đã học:
Cách sử dụng các hàm toán học và toán tử.
Cách sử dụng CASE WHEN để thực hiện các phép kiểm tra điều kiện.
Cách sử dụng COALESCE và CAST để xử lý dữ liệu NULL và chuyển đổi kiểu dữ liệu.
Cách sử dụng REPLACE để thay thế chuỗi.
Hẹn gặp lại bạn vào ngày 6 với chủ đề Intermediate: Joins!
20. Today's challenges
Thử thách 1: Viết truy vấn để tính tổng giá trị đơn hàng (total_amount) và phân loại đơn hàng thành "High", "Medium", hoặc "Low" dựa trên giá trị từ bảng orders.
Thử thách 2: Viết truy vấn để lấy tên khách hàng (customer_name) và địa chỉ email (email). Nếu email là NULL, hãy trả về 'No Email' từ bảng customers.
Thử thách 3: Viết truy vấn để thay thế từ "Sale" bằng "Discount" trong tên sản phẩm (product_name) từ bảng products.