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

เปรียบเทียบสองคอลัมน์ใน MySQL Query เดียว ได้หนึ่งแถว

ใช้ ORDER BY col1 DESC, col2 DESC LIMIT 1 หาแถวที่มีค่าสูงสุดตามลำดับความสำคัญ

ตัวอย่างการใช้งาน

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

mysql> CREATE TABLE DemoTable (Num1 INT, Num2 INT);
mysql> INSERT INTO DemoTable VALUES (60, 249), (59, 250);

2. เรียง Num2 DESC ก่อน แล้ว Num1 DESC แล้ว LIMIT 1

mysql> SELECT * FROM DemoTable 
    -> ORDER BY Num2 DESC, Num1 DESC LIMIT 1;

ผลลัพธ์

+------+------+
| Num1 | Num2 |
+------+------+
| 59   | 250  |
+------+------+

เหตุผล: Num2 สูงสุดคือ 250 (แถวที่ 2) → เลือกแถวนั้นเลย ไม่ต้องดู Num1

กรณี Num2 เท่ากัน จึงดู Num1

INSERT INTO DemoTable VALUES (60, 250);
-- ตอนนี้มี (59,250) และ (60,250)
SELECT * FROM DemoTable ORDER BY Num2 DESC, Num1 DESC LIMIT 1;
-- ผลลัพธ์: (60, 250) เพราะ Num1 มากกว่า

การประยุกต์: หา Top-N แบบหลายเกณฑ์

-- หา 3 อันดับแรก: เรียง Score DESC, แล้ว Age ASC (อายุน้อยกว่าชนะ)
SELECT * FROM players ORDER BY Score DESC, Age ASC LIMIT 3;