Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Có thể ORDER BY với phép tính toán học trong MySQL?

Có, MySQL cho phép dùng biểu thức toán học (cộng, trừ, nhân, chia, hàm) trực tiếp trong mệnh đề ORDER BY.

Ví dụ minh họa

Tạo bảng số lượng và đơn giá:

CREATE TABLE orderByMathCalculation (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Quantity INT,
    Price INT
);

INSERT INTO orderByMathCalculation (Quantity, Price) VALUES
(10, 50), (20, 40), (2, 20), (11, 10);

Dữ liệu:

+----+----------+-------+
| Id | Quantity | Price |
+----+----------+-------+
| 1  | 10       | 50    |
| 2  | 20       | 40    |
| 3  | 2        | 20    |
| 4  | 11       | 10    |
+----+----------+-------+

Sắp xếp tăng dần theo thành tiền (Quantity × Price):

SELECT * FROM orderByMathCalculation
ORDER BY Quantity * Price;

Kết quả:

+----+----------+-------+
| Id | Quantity | Price |
+----+----------+-------+
| 3  | 2        | 20    |  -- 40
| 4  | 11       | 10    |  -- 110
| 1  | 10       | 50    |  -- 500
| 2  | 20       | 40    |  -- 800
+----+----------+-------+

Sắp xếp giảm dần:

SELECT * FROM orderByMathCalculation
ORDER BY Quantity * Price DESC;

Kết quả:

+----+----------+-------+
| Id | Quantity | Price |
+----+----------+-------+
| 2  | 20       | 40    |
| 1  | 10       | 50    |
| 4  | 11       | 10    |
| 3  | 2        | 20    |
+----+----------+-------+

Lưu ý:

  • Biểu thức trong ORDER BY được tính cho mỗi hàng.
  • Có thể dùng alias định nghĩa trong SELECT: SELECT *, Quantity*Price AS Total FROM ... ORDER BY Total.
  • Hàm toán học: ABS(), ROUND(), SQRT(), LOG(), v.v. đều dùng được.
  • Hiệu năng: Biểu thức phức tạp không dùng index. Cân nhắc computed column (generated column) + index nếu truy vấn thường xuyên.