CodeGym /Các khóa học /SQL SELF /Ví dụ về định dạng và sắp xếp dữ liệu trong các bài toán ...

Ví dụ về định dạng và sắp xếp dữ liệu trong các bài toán thực tế

SQL SELF
Mức độ , Bài học
Có sẵn

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:

  1. Kết hợp first_namelast_name thành một cột full_name.
  2. Lấy ra khách hàng duy nhất thôi.
  3. 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:

  1. Tạo cột formatted_order_date, trong đó ngày đặt hàng sẽ ở định dạng DD-MM-YYYY.
  2. Xóa bản ghi trùng về khách hàng và ngày (chỉ giữ lại các cặp customer_nameorder_date duy nhất).
  3. Sắp xếp đơn hàng theo ngày giảm dần.
  4. 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
  1. 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.
  2. Xóa các tổ hợp trùng product_namecategory.
  3. 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(), DISTINCTORDER 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!

2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Định dạng và sắp xếp danh sách sinh viên
Định dạng và sắp xếp danh sách sinh viên
2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Các đơn hàng duy nhất với định dạng khách hàng
Các đơn hàng duy nhất với định dạng khách hàng
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION