เมื่อต้องการหาค่าสูงสุด (MAX) และต่ำสุด (MIN) ของหลายคอลัมน์ใน Query เดียว ให้ใช้ Aggregate Functions MIN() และ MAX() แยกคอลัมน์ด้วยจุลภาค
สร้างตารางและข้อมูล
mysql> create table DemoTable (FirstValue int, SecondValue int);
mysql> insert into DemoTable values(10,30),(30,60),(100,500),(50,80);
ข้อมูลในตาราง
+------------+-------------+ | FirstValue | SecondValue | +------------+-------------+ | 10 | 30 | | 30 | 60 | | 100 | 500 | | 50 | 80 | +------------+-------------+
คำสั่ง MIN/MAX หลายคอลัมน์
mysql> select min(FirstValue), min(SecondValue), max(FirstValue), max(SecondValue) from DemoTable;
ผลลัพธ์
+-----------------+------------------+-----------------+------------------+ | min(FirstValue) | min(SecondValue) | max(FirstValue) | max(SecondValue) | +-----------------+------------------+-----------------+------------------+ | 10 | 30 | 100 | 500 | +-----------------+------------------+-----------------+------------------+
เพิ่ม Alias อ่านง่าย
SELECT
MIN(FirstValue) AS min_first,
MAX(FirstValue) AS max_first,
MIN(SecondValue) AS min_second,
MAX(SecondValue) AS max_second
FROM DemoTable;
ขยาย: รวม Aggregate อื่นๆ
SELECT
COUNT(*) AS cnt,
MIN(FirstValue) AS min_val,
MAX(FirstValue) AS max_val,
AVG(FirstValue) AS avg_val,
SUM(FirstValue) AS sum_val,
STDDEV(FirstValue) AS stddev_val
FROM DemoTable;
NULL Handling
- MIN/MAX/SUM/AVG ข้าม NULL อัตโนมัติ
- ถ้าทุกค่าเป็น NULL → ผลลัพธ์ NULL (ยกเว้น COUNT(*) = 0)
- ใช้ COALESCE:
COALESCE(MIN(col), 0)
ประสิทธิภาพ
- Single Table Scan - อ่านตารางครั้งเดียว คำนวณ Aggregate ทั้งหมดพร้อมกัน
- Index บนคอลัมน์ช่วย MIN/MAX เร็วขึ้น (Index Seek แทน Full Scan)
- Composite Index:
INDEX idx_fv_sv (FirstValue, SecondValue)
Window Functions (MySQL 8.0+) - ต่อแถว
SELECT
FirstValue,
MIN(FirstValue) OVER() AS min_overall,
MAX(FirstValue) OVER() AS max_overall
FROM DemoTable;