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

MAX(DISTINCT ...) vs MAX() ใน MySQL ให้ผลลัพธ์เหมือนกันเสมอ

สรุปสั้น: ผลลัพธ์เหมือนกันทุกกรณี

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)
นับทุกแถว (รวมซ้ำ)เฉพาะค่าที่ไม่ซ้ำ
ตัวอย่าง64 (80, 88, 78, 68)

กรณีที่ DISTINCT มีผล

  • COUNT(DISTINCT col) - นับค่าที่ไม่ซ้ำ
  • SUM(DISTINCT col) - รวมค่าที่ไม่ซ้ำ
  • AVG(DISTINCT col) - ค่าเฉลี่ยของค่าที่ไม่ซ้ำ
  • GROUP_CONCAT(DISTINCT col) - รวมค่าที่ไม่ซ้ำ

สรุป

MAX() และ MIN() ไม่ต้องเขียน DISTINCT ให้ผลลัพธ์เหมือนกัน MySQL จัดการอัตโนมัติ เขียน MAX(col) สั้นกว่าและอ่านง่ายกว่า