CodeGym /Các khóa học /SQL SELF /Sắp xếp dữ liệu (ORDER BY): sắp xếp tăng dần và giảm dần ...

Sắp xếp dữ liệu (ORDER BY): sắp xếp tăng dần và giảm dần (ASC, DESC)

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

Khi làm việc với database, nhiều lúc bạn sẽ muốn xem dữ liệu theo một thứ tự nào đó. Ví dụ:

  • "Hiển thị top-10 sản phẩm đắt nhất."
  • "Những đơn hàng nào là mới nhất?"
  • "Độ tuổi của học sinh, bắt đầu từ nhỏ nhất?"

Muốn sắp xếp dữ liệu là chuyện rất tự nhiên: kể cả bạn là coder siêu đỉnh, nhìn một đống dòng lộn xộn cũng chẳng vui vẻ gì. Đó là lý do SQL cho chúng ta công cụ để sắp xếp các dòng trong kết quả trả về — lệnh ORDER BY.

Cơ bản về sắp xếp với ORDER BY

ORDER BY — kiểu như cây đũa thần giúp bạn sắp xếp các dòng trong kết quả. Nếu không dùng nó, dữ liệu trả về sẽ ở "thứ tự ngẫu nhiên" (không phải lỗi database đâu, chỉ là không đảm bảo thứ tự thôi).

Đây là cú pháp của ORDER BY:

SELECT cot1, cot2
FROM bang
ORDER BY cot1 DESC;
  • cot1: tên cột mà bạn muốn sắp xếp theo.
  • ASC: sắp xếp tăng dần (đây là giá trị mặc định, nên bạn có thể bỏ qua).
  • DESC: sắp xếp giảm dần.

Ví dụ

Giả sử chúng ta có bảng students:

id name age
1 Alex 22
2 Maria 19
3 Otto 21

Giờ mình sẽ sắp xếp học sinh theo tuổi (tăng dần):

SELECT name, age
FROM students
ORDER BY age ASC;

Kết quả:

name age
Maria 19
Otto 21
Alex 22

Nếu đổi hướng sắp xếp sang giảm dần:

SELECT name, age
FROM students
ORDER BY age DESC;

Kết quả sẽ là:

name age
Alex 22
Otto 21
Maria 19

Sắp xếp theo nhiều cột

Đôi khi một cột để sắp xếp là chưa đủ. Hãy tưởng tượng trong database có vài học sinh cùng tuổi, bạn muốn thêm một tiêu chí nữa, ví dụ theo tên.

Sắp xếp theo nhiều cột:

SELECT cot1, cot2
FROM bang
ORDER BY cot1 DESC, cot2 ASC;

Ví dụ với bảng sau:

id name age
1 Alex 22
2 Maria 19
3 Otto 21
4 Anna 19

Query:

SELECT name, age
FROM students
ORDER BY age ASC, name ASC;

Kết quả:

name age
Anna 19
Maria 19
Otto 21
Alex 22

Ở đây đầu tiên sắp xếp theo tuổi (tăng dần), trong mỗi nhóm tuổi thì sắp xếp theo tên theo thứ tự alphabet.

Sắp xếp với alias

Nếu bạn dùng alias (tên thay thế) cho cột, bạn cũng có thể sắp xếp theo alias đó.

SELECT name AS "Tên", age AS "Tuổi"
FROM students
ORDER BY "Tuổi" DESC;

Kết quả:

Tên Tuổi
Alex 22
Otto 21
Maria 19

Tại sao cái này quan trọng? Vì trước đây không có, nên sắp xếp theo cột tính toán khá là rối.

Sắp xếp với cột tính toán

SQL cho phép bạn tính toán ngay trong query, rồi sắp xếp theo kết quả tính toán đó.

Ví dụ 1. Tính toán đơn giản

SELECT name, age, age * 2 AS tuoi_gap_doi
FROM students
ORDER BY tuoi_gap_doi DESC;

Kết quả:

name age tuoi_gap_doi
Alex 22 44
Otto 21 42
Maria 19 38

Ví dụ 2. Dùng hàm Giả sử chúng ta lưu giá sản phẩm trong bảng products:

ten_san_pham gia
Sản phẩm A 100
Sản phẩm B 200
Sản phẩm C 150

Giờ mình sẽ sắp xếp theo giá đã làm tròn, nhân với 0.9 (ví dụ giảm giá). Hàm ROUND trả về số đã làm tròn đến số thập phân mong muốn.

SELECT ten_san_pham, gia, ROUND(gia * 0.9, 1) AS gia_sau_giam
FROM products
ORDER BY gia_sau_giam ASC;

Kết quả sẽ như này:

ten_san_pham gia gia_sau_giam
Sản phẩm A 100 90
Sản phẩm C 150 135
Sản phẩm B 200 180

Ứng dụng thực tế của sắp xếp

Sắp xếp đóng vai trò quan trọng trong các trường hợp sau:

  • Làm báo cáo, ví dụ top-10 doanh số tốt nhất trong tháng.
  • Hiển thị dữ liệu cho UI, ví dụ danh sách đơn hàng sắp xếp theo ngày.
  • Tạo danh sách cho phân tích, ví dụ nhóm theo ưu tiên.

Lỗi thường gặp khi dùng ORDER BY

Lỗi có thể xuất hiện ở mọi bước. Đây là vài điểm bạn nên chú ý:

  • Nếu bạn thử sắp xếp theo cột không tồn tại, sẽ bị lỗi: column "not_a_column" does not exist.
  • Sắp xếp theo alias dùng trong cột tính toán có thể gây rối nếu alias được đặt ở cấp cao hơn.
  • Nếu bạn quên chỉ định hướng sắp xếp, PostgreSQL mặc định dùng ASC. Không phải lỗi, nhưng có thể ra kết quả không như ý.

Giờ bạn đã biết cách kiểm soát sắp xếp trong PostgreSQL với ORDER BY. Nhớ nhé, dữ liệu sắp xếp gọn gàng là một nửa thành công khi viết SQL hiệu quả. Tiếp tục chủ đề tiếp theo nào! 😉

2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Sắp xếp theo thứ tự tăng dần
Sắp xếp theo thứ tự tăng dần
2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Sắp xếp theo thứ tự giảm dần
Sắp xếp theo thứ tự giảm dần
1
Khảo sát/đố vui
, cấp độ , bài học
Không có sẵn
Giới thiệu về SQL
Giới thiệu về SQL
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION