การเรียงลำดับแถวตามค่าสูงสุดจากหลายคอลัมน์ด้วย 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) ไม่ใช่คอลัมน์ทั้งหมด