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

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

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

Một trong những kịch bản phổ biến nhất khi làm việc với database là chuẩn bị dữ liệu cho báo cáo. Hãy tưởng tượng thế này: bạn làm ở trường đại học, và sếp của bạn (người chắc chắn không biết gì về SQL) nhờ bạn tạo danh sách sinh viên với tên và họ được nối lại, đồng thời hiển thị ngày sinh theo định dạng DD-MM-YYYY. Nhiệm vụ rõ ràng: cần trình bày dữ liệu cho đẹp mắt. Và SQL chính là trợ thủ đắc lực của chúng ta trong vụ này.

Ví dụ 1: Nối tên và họ

Bắt đầu bằng việc nối tên (first_name) và họ (last_name) của sinh viên từ bảng students của chúng ta.

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name
FROM 
    students;

Ở đây có gì?

  • CONCAT() dùng để nối chuỗi. Mình thêm dấu cách giữa tên và họ cho dễ nhìn.
  • Kết quả được lưu vào cột mới full_name.

Kết quả có thể như sau:

full_name
Otto Art
Anna Song
Pol Mac

Ví dụ 2: Định dạng ngày tháng

Bây giờ mình thêm định dạng ngày sinh vào truy vấn.

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students;

Có gì mới ở đây:

  • Mình dùng hàm TO_CHAR() cho trường birth_date.
  • Định dạng 'DD-MM-YYYY' chuyển ngày thành dạng dễ nhìn (ví dụ: 25-12-2001).

Kết quả:

full_name formatted_birth_date
Otto Art 12-04-1995
Anna Song 03-08-1996
Pol Mac 21-11-1997

Voilà! Bạn vừa tạo ra một báo cáo đẹp mắt rồi đó.

Định dạng để xuất dữ liệu

Giả sử một đồng nghiệp của bạn muốn xuất dữ liệu đơn hàng ra file CSV để làm việc tiếp trên Excel. Nhưng dữ liệu trong database lại lưu ở dạng không tiện cho họ, còn team sales thì đòi hỏi một kiểu hiển thị cụ thể. Ví dụ, thay vì trường total_price chỉ có giá trị số, họ muốn thấy nó ở dạng: $100.00.

Ví dụ 3: Chuyển số thành định dạng tiền tệ

Trình bày dữ liệu đơn hàng từ bảng orders để xuất ra:

SELECT
    order_id,
    TO_CHAR(total_price, 'FM$999,999.00') AS formatted_price
FROM 
    orders;

Hàm TO_CHAR() làm gì ở đây?

  • FM (Fill Mode) loại bỏ khoảng trắng thừa.
  • $ thêm ký hiệu tiền tệ.
  • 999,999.00 định dạng số với dấu phân cách hàng nghìn và hai số sau dấu phẩy.

Kết quả:

order_id formatted_price
1 $1,000.00
2 $2,500.50
3 $10.00

Bây giờ đồng nghiệp của bạn có thể dễ dàng import dữ liệu vào Excel và khen bạn trong buổi họp rồi nhé.

Bài tập cuối cùng

Đây mới là phần thú vị nhất. Hãy kết hợp tất cả kỹ năng bạn đã học.

Bài toán

Tạo truy vấn cho bảng students mà:

  1. Nối tên và họ thành một cột full_name.
  2. Chuyển ngày sinh sang định dạng DD-MM-YYYY.
  3. Hiển thị tuổi của sinh viên tính đến ngày hiện tại.

Truy vấn sẽ trông như sau:

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date,
    DATE_PART('year', AGE(birth_date)) AS age
FROM 
    students;

Các thành phần mới:

  • AGE(birth_date) trả về khoảng cách giữa ngày hiện tại và ngày sinh, nhưng ở dạng năm, tháng, ngày.
  • DATE_PART('year', AGE(birth_date)) lấy ra số năm từ khoảng cách đó.

Kết quả:

full_name formatted_birth_date age
Otto Art 12-04-1995 28
Anna Song 03-08-1996 27
Pol Mac 21-11-1997 25

Báo cáo như vậy sẽ làm hài lòng cả những đồng nghiệp khó tính nhất.

Định dạng cho điều kiện đặc biệt

Đôi khi định dạng dữ liệu là để tạo điều kiện hoặc lọc. Ví dụ, lấy ra các sinh viên có sinh nhật trong tháng hiện tại.

Ví dụ 4: Lọc theo tháng

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students
WHERE 
    DATE_PART('month', birth_date) = DATE_PART('month', CURRENT_DATE);

Nó hoạt động thế nào?

  • DATE_PART('month', birth_date) lấy ra tháng từ ngày sinh.
  • CURRENT_DATE là ngày hiện tại. Mình lấy tháng từ đó bằng DATE_PART().

Kết hợp định dạng và sắp xếp

Bây giờ kết hợp tất cả những gì đã học và thêm sắp xếp nữa. Ví dụ, tạo danh sách sinh viên được sắp xếp theo ngày sinh.

Ví dụ 5: Sắp xếp theo ngày sinh

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students
ORDER BY 
    birth_date ASC;

Sắp xếp tăng dần ASC sẽ cho thấy sinh viên lớn tuổi nhất trước, còn giảm dần DESC thì ngược lại, sinh viên trẻ nhất lên đầu.

Kết hợp với giá trị duy nhất

Cuối cùng là bài toán có dấu sao. Giả sử trường đại học của bạn có nhiều chi nhánh ở các thành phố khác nhau, và bạn cần tạo danh sách các thành phố duy nhất mà sinh viên đang học, sắp xếp theo thứ tự chữ cái.

Ví dụ 6: Giá trị duy nhất và sắp xếp

SELECT DISTINCT
    city 
FROM 
    students
ORDER BY 
    city ASC;

DISTINCT làm gì?

Nó loại bỏ các giá trị trùng lặp, để mỗi thành phố chỉ xuất hiện một lần trong kết quả.

Tại sao cần làm vậy?

Tiện lợi và đẹp mắt. Khi dữ liệu được trình bày đẹp, làm việc với nó dễ hơn, sếp cũng ít hỏi hơn.

Sẵn sàng cho thực tế. Bạn sẽ tự động tạo báo cáo, làm việc với xuất dữ liệu và chuẩn bị các slide đẹp.

Tăng giá trị bản thân. SQL không chỉ là về dữ liệu. Nó là về cách làm cho dữ liệu trở nên dễ hiểu và hữu ích.

Hãy dùng những kỹ năng vừa học để không chỉ viết truy vấn, mà còn tạo ra những tuyệt tác! Ở các bài giảng tiếp theo, tụi mình sẽ tiếp tục khám phá phép thuật của PostgreSQL nhé.

1
Khảo sát/đố vui
, cấp độ , bài học
Không có sẵn
Định dạng chuỗi
Định dạng chuỗi
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION