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.