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

Sắp xếp hiệu chênh lệch hai cột trong MySQL?

Giải pháp: ORDER BY biểu thức tính toán

Tính hiệu (Value1 - Value2) trong SELECT, đặt alias, dùng trong ORDER BY.

Ví dụ minh họa

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (Value1 INT, Value2 INT);
mysql> INSERT INTO DemoTable VALUES(10, 40), (50, 5), (51, 56), (52, 78), (90, 7);

Dữ liệu gốc

+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 10     | 40     |
| 50     | 5      |
| 51     | 56     |
| 52     | 78     |
| 90     | 7      |
+--------+--------+

Truy vấn: Hiệu Value1 - Value2, sắp giảm dần

mysql> SELECT (Value1 - Value2) AS Sub 
    -> FROM DemoTable 
    -> ORDER BY Sub DESC;

Kết quả

+------+
| Sub  |
+------+
| 83   |  <-- 90 - 7
| 45   |  <-- 50 - 5
| -5   |  <-- 51 - 56
| -26  |  <-- 52 - 78
| -30  |  <-- 10 - 40
+------+

Mở rộng: Giữ cả cột gốc

SELECT Value1, Value2, (Value1 - Value2) AS Difference
FROM DemoTable
ORDER BY Difference DESC;

Kết quả

+--------+--------+------------+
| Value1 | Value2 | Difference |
+--------+--------+------------+
| 90     | 7      | 83         |
| 50     | 5      | 45         |
| 51     | 56     | -5         |
| 52     | 78     | -26        |
| 10     | 40     | -30        |
+--------+--------+------------+

Sắp xếp theo giá trị tuyệt đối

ORDER BY ABS(Value1 - Value2) DESC;

Kết quả

+------------+
| ABS(Diff)  |
+------------+
| 83         |
| 45         |
| 30         |
| 26         |
| 5          |
+------------+

Ứng dụng thực tế

  • Chênh lệch giá: sale_price - cost_price
  • Độ lệch dự báo: actual - predicted
  • Chênh lệch điểm: score1 - score2

Lưu ý

  • Alias trong ORDER BY được hỗ trợ MySQL (không phải tất cả DB)
  • Có thể ORDER BY vị trí: ORDER BY 3 DESC (cột thứ 3)
  • NULL trong phép tính → kết quả NULL → xếp cuối (ASC) hoặc đầu (DESC)