Sắp xếp và định dạng dữ liệu là những kỹ năng quan trọng giúp bạn chuẩn bị báo cáo dễ đọc, tối ưu hóa phân tích dữ liệu và cải thiện trải nghiệm người dùng. Những kiến thức này sẽ cực kỳ hữu ích khi bạn tạo báo cáo phân tích, chuẩn bị dữ liệu để xuất khẩu, cũng như trong công việc hàng ngày với database. Thực tế, bạn sẽ thường xuyên gặp các bài toán cần định dạng dữ liệu cho đẹp, xóa bản ghi trùng và sắp xếp thông tin cho dễ nhìn. Đó chính là những gì tụi mình sẽ làm hôm nay nhé!
Ví dụ 1: Tạo danh sách khách hàng duy nhất với tên đầy đủ, sắp xếp theo họ
Bọn mình có bảng customers lưu thông tin khách hàng như sau:
| id | first_name | last_name | city |
|---|---|---|---|
| 1 | Alex | Lin | New York |
| 2 | Maria | Chi | Los Angeles |
| 3 | Alex | Lin | New York |
| 4 | Anna | Song | Chicago |
Mục tiêu của tụi mình:
- Kết hợp
first_namevàlast_namethành một cộtfull_name. - Lấy ra khách hàng duy nhất thôi.
- Sắp xếp danh sách theo họ (
last_name).
Truy vấn SQL
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
city
FROM customers
ORDER BY last_name;
| full_name | city |
|---|---|
| Maria Chi | Los Angeles |
| Alex Lin | New York |
| Anna Song | Chicago |
Lưu ý là bản ghi trùng Alex Lin đã bị loại nhờ DISTINCT, và toàn bộ danh sách đã được sắp xếp theo họ theo thứ tự chữ cái.
Ví dụ 2: Định dạng dữ liệu đơn hàng và sắp xếp
Bảng orders lưu thông tin về đơn hàng như sau:
| order_id | customer_name | order_date | total_amount |
|---|---|---|---|
| 1 | Alex Lin | 2023-10-01 | 1500 |
| 2 | Maria Chi | 2023-10-02 | 2000 |
| 3 | Alex Lin | 2023-10-03 | 1500 |
| 4 | Anna Song | 2023-10-04 | 3000 |
Mục tiêu của tụi mình:
- Tạo cột
formatted_order_date, trong đó ngày đặt hàng sẽ ở định dạng DD-MM-YYYY. - Xóa bản ghi trùng về khách hàng và ngày (chỉ giữ lại các cặp
customer_namevàorder_dateduy nhất). - Sắp xếp đơn hàng theo ngày giảm dần.
- Truy vấn SQL
SELECT DISTINCT
customer_name,
TO_CHAR(order_date, 'DD-MM-YYYY') AS formatted_order_date,
total_amount
FROM orders
ORDER BY order_date DESC;
Kết quả:
| customer_name | formatted_order_date | total_amount |
|---|---|---|
| Anna Song | 04-10-2023 | 3000 |
| Alex Lin | 03-10-2023 | 1500 |
| Maria Chi | 02-10-2023 | 2000 |
Chú ý, nhờ hàm TO_CHAR() mà tụi mình đổi được ngày sang định dạng DD-MM-YYYY, còn DISTINCT thì loại trùng bản ghi.
Ví dụ 3: Lấy ra các tổ hợp "tên + họ" sinh viên duy nhất và sắp xếp theo họ và ngày sinh
Bảng students chứa thông tin sinh viên như sau:
| student_id | first_name | last_name | birth_date |
|---|---|---|---|
| 1 | Alex | Lin | 2001-03-15 |
| 2 | Maria | Chi | 2000-06-20 |
| 3 | Alex | Lin | 2001-03-15 |
| 4 | Anna | Song | 1999-10-10 |
Mục tiêu của tụi mình:
- Kết hợp tên và họ thành một cột
full_name. - Lấy ra các tổ hợp "tên + họ" duy nhất.
- Sắp xếp sinh viên theo họ, sau đó theo ngày sinh.
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
birth_date
FROM students
ORDER BY last_name, birth_date;
Kết quả:
| full_name | birth_date |
|---|---|
| Maria Chi | 2000-06-20 |
| Alex Lin | 2001-03-15 |
| Anna Song | 1999-10-10 |
Lưu ý đặc biệt: hai bản ghi giống nhau về sinh viên "Alex Lin" đã được gộp thành một dòng, và việc sắp xếp được thực hiện trước theo họ, sau đó theo ngày sinh.
Bài tập thực hành
Áp dụng kiến thức vừa học để giải bài sau nhé:
Bài toán: Bạn có bảng products với dữ liệu như sau:
| product_id | category | product_name | price |
|---|---|---|---|
| 1 | Elektronika | Telefon | 50000 |
| 2 | Odezhda | Kurtka | 8000 |
| 3 | Elektronika | Noutbuk | 70000 |
| 4 | Odezhda | Kurtka | 8000 |
- Tạo cột
formatted_product, trong đóproduct_nameđược kết hợp với category bằng dấu gạch ngang, ví dụ:Telefon - Elektronika. - Xóa các tổ hợp trùng
product_namevàcategory. - Sắp xếp sản phẩm theo category, sau đó theo giá (từ rẻ đến đắt).
Dưới đây là cấu trúc truy vấn gợi ý để làm bài:
SELECT DISTINCT
CONCAT(product_name, ' - ', category) AS formatted_product,
price
FROM products
ORDER BY category, price ASC;
Thử tự tưởng tượng kết quả truy vấn này sẽ ra sao nhé!
Việc dùng các hàm CONCAT(), DISTINCT và ORDER BY giúp dữ liệu cực kỳ dễ đọc và có cấu trúc rõ ràng, điều này siêu quan trọng trong các dự án thực tế và bài toán đời thường. Hãy chắc chắn là bạn hiểu cách kết hợp chúng bằng cách luyện tập nhiều ví dụ nha!
GO TO FULL VERSION