สรุปสั้น: ผลลัพธ์เหมือนกันทุกกรณี
MySQL ภายในแปลง MAX(column) เป็น MAX(DISTINCT column) อัตโนมัติ เพราะค่าสูงสุด (Maximum) ไม่ได้รับผลกระทบจากค่าซ้ำ
ไวยากรณ์
-- ทั้งสองให้ผลลัพธ์เหมือนกัน
SELECT MAX(DISTINCT column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;
ตัวอย่างยืนยัน
1. สร้างตารางและข้อมูล (มีค่าซ้ำ 88 สามครั้ง)
CREATE TABLE DemoTable (Number INT);
INSERT INTO DemoTable VALUES (80), (88), (78), (88), (68), (88);
2. CASE 1: MAX(DISTINCT Number)
SELECT MAX(DISTINCT Number) FROM DemoTable;
+----------------------+
| MAX(DISTINCT Number) |
+----------------------+
| 88 |
+----------------------+
3. CASE 2: MAX(Number) (ไม่มี DISTINCT)
SELECT MAX(Number) FROM DemoTable;
+-------------+
| MAX(Number) |
+-------------+
| 88 |
+-------------+
ทำไมถึงเหมือนกัน?
- MAX() หาค่าสูงสุด ค่าซ้ำไม่ส่งผลต่อค่าสูงสุด
- MIN() เหมือนกัน - ค่าต่ำสุดไม่ได้รับผลกระทบจากค่าซ้ำ
- MySQL Optimizer จะ Eliminate DISTINCT ออกไปอัตโนมัติสำหรับ MAX/MIN
แตกต่างกับ COUNT()
| ฟังก์ชัน | COUNT(column) | COUNT(DISTINCT column) |
|---|---|---|
| นับ | ทุกแถว (รวมซ้ำ) | เฉพาะค่าที่ไม่ซ้ำ |
| ตัวอย่าง | 6 | 4 (80, 88, 78, 68) |
กรณีที่ DISTINCT มีผล
COUNT(DISTINCT col)- นับค่าที่ไม่ซ้ำSUM(DISTINCT col)- รวมค่าที่ไม่ซ้ำAVG(DISTINCT col)- ค่าเฉลี่ยของค่าที่ไม่ซ้ำGROUP_CONCAT(DISTINCT col)- รวมค่าที่ไม่ซ้ำ
สรุป
MAX() และ MIN() ไม่ต้องเขียน DISTINCT ให้ผลลัพธ์เหมือนกัน MySQL จัดการอัตโนมัติ เขียน MAX(col) สั้นกว่าและอ่านง่ายกว่า