การหาค่าต่ำสุดจากหลายคอลัมน์ด้วยฟังก์ชัน LEAST()
ฟังก์ชัน LEAST() ใน MySQL ใช้สำหรับหาค่าที่น้อยที่สุดจากรายการค่าหลายค่า ทำงานได้กับตัวเลข สตริง และวันที่
รูปแบบคำสั่ง
LEAST(value1, value2, value3, ...)
ตัวอย่าง: หาคะแนนต่ำสุดจาก 4 คอลัมน์คะแนน
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (
Score1 INT,
Score2 INT,
Score3 INT,
Score4 INT
);
INSERT INTO DemoTable VALUES (88, 76, 45, 56);
INSERT INTO DemoTable VALUES (99, 78, 87, 34);
INSERT INTO DemoTable VALUES (34, 32, 56, 98);
2. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable;
ผลลัพธ์:
+--------+--------+--------+--------+
| Score1 | Score2 | Score3 | Score4 |
+--------+--------+--------+--------+
| 88 | 76 | 45 | 56 |
| 99 | 78 | 87 | 34 |
| 34 | 32 | 56 | 98 |
+--------+--------+--------+--------+
3. หาคะแนนต่ำสุดของแต่ละแถว
SELECT LEAST(Score1, Score2, Score3, Score4) AS MinimumScore FROM DemoTable;
ผลลัพธ์:
+--------------+
| MinimumScore |
+--------------+
| 45 |
| 34 |
| 32 |
+--------------+
การทำงานของ LEAST()
- เปรียบเทียบค่าทั้งหมดที่ส่งเข้าไป
- คืนค่าที่น้อยที่สุด (สำหรับตัวเลข) หรือตัวอักษรที่อยู่หน้าสุด (สำหรับสตริง)
- หากมีค่า
NULLอยู่ในรายการ ผลลัพธ์จะเป็นNULL(ยกเว้นจะใช้COALESCEจัดการก่อน)
ฟังก์ชันคู่คือ GREATEST()
สำหรับหาค่าสูงสุด ใช้ GREATEST() แทน:
SELECT GREATEST(Score1, Score2, Score3, Score4) AS MaximumScore FROM DemoTable;
กรณีมี NULL และการจัดการ
-- หากมี NULL ใช้ COALESCE ก่อน
SELECT LEAST(COALESCE(Score1, 9999), COALESCE(Score2, 9999), ...) FROM DemoTable;
-- หรือใช้ CASE WHEN
SELECT CASE
WHEN Score1 IS NOT NULL AND Score1 <= COALESCE(Score2, Score1) AND Score1 <= COALESCE(Score3, Score1) AND Score1 <= COALESCE(Score4, Score1) THEN Score1
WHEN Score2 IS NOT NULL AND Score2 <= COALESCE(Score3, Score2) AND Score2 <= COALESCE(Score4, Score2) THEN Score2
-- ...ต่อไป
END AS MinScore FROM DemoTable;
การใช้งานกับชนิดข้อมูลอื่น
- สตริง:
LEAST('apple', 'banana', 'cherry')→ 'apple' - วันที่:
LEAST('2024-01-01', '2024-12-31', '2024-06-15')→ '2024-01-01' - ผสมผสาน: MySQL จะพยายามแปลงชนิดให้ตรงกัน (Type Coercion)