Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: เรียงลำดับหลายคอลัมน์พร้อมกันด้วย GREATEST()

การเรียงลำดับแถวตามค่าสูงสุดจากหลายคอลัมน์ด้วย GREATEST()

GREATEST() คืนค่าสูงสุดจากรายการค่าที่ให้มา ใช้ใน ORDER BY เพื่อเรียงแถวตามค่าสูงสุดของหลายคอลัมน์

สร้างตารางและข้อมูล

mysql> create table DemoTable1395 (
    -> Value1 int, Value2 int, Value3 int
    -> );
Query OK, 0 rows affected (0.79 sec)

mysql> insert into DemoTable1395 values(40, 50, 60);
mysql> insert into DemoTable1395 values(90, 56, 80);
mysql> insert into DemoTable1395 values(10, 20, 30);

ข้อมูลก่อนเรียง

+--------+--------+--------+
| Value1 | Value2 | Value3 |
+--------+--------+--------+
| 40     | 50     | 60     |
| 90     | 56     | 80     |
| 10     | 20     | 30     |
+--------+--------+--------+

คำสั่ง ORDER BY GREATEST

mysql> select * from DemoTable1395 
    -> order by greatest(Value1, Value2, Value3);

ผลลัพธ์ (เรียงจากค่าสูงสุดของแต่ละแถว น้อยไปมาก)

+--------+--------+--------+
| Value1 | Value2 | Value3 |
+--------+--------+--------+
| 10     | 20     | 30     |  -- max=30
| 40     | 50     | 60     |  -- max=60
| 90     | 56     | 80     |  -- max=90
+--------+--------+--------+

ฟังก์ชันคู่คู่: LEAST()

LEAST() คืนค่าต่ำสุด — ใช้เรียงจากค่าต่ำสุดของแต่ละแถว

การจัดการ NULL

  • GREATEST(10, NULL, 20) → คืน NULL
  • ใช้ COALESCE(col, 0) หรือ IFNULL(col, 0) ก่อนส่งเข้า GREATEST:
    ORDER BY GREATEST(COALESCE(Value1,0), COALESCE(Value2,0), COALESCE(Value3,0))

กรณีซับซ้อน: เรียงตามหลายเกณฑ์

ORDER BY 
  GREATEST(Value1, Value2, Value3) DESC,  -- เกณฑ์หลัก: max สูงสุด
  Value1 DESC,                             -- เกณฑ์รอง: Value1 สูงสุด
  Value2 DESC;                             -- เกณฑ์รอง: Value2 สูงสุด

ข้อควรระวัง: GREATEST() ไม่ใช่ aggregate function — ทำงานต่อแถว (row-wise) ไม่ใช่คอลัมน์ทั้งหมด