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

SELECT DISTINCT เรียงตาม ID ใน MySQL

ใช้ GROUP BY ร่วม ORDER BY MAX(id) เพื่อ DISTINCT แล้วเรียงตาม ID สูงสุดของแต่ละกลุ่ม

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

1. สร้างตารางข้อมูลซ้ำ

mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES 
(10,'John'), (10,'John'), (20,'Sam'), (20,'Sam'), (30,'David'), (30,'David');

2. DISTINCT เรียง ID มากไปน้อย (Top 2)

mysql> SELECT Name FROM DemoTable 
    -> GROUP BY Name 
    -> ORDER BY MAX(Id) DESC 
    -> LIMIT 2;

ผลลัพธ์

+-------+
| Name  |
+-------+
| David |
| Sam   |
+-------+

คำอธิบาย

  • GROUP BY Name → รวมชื่อซ้ำ (ได้ 3 กลุ่ม: John, Sam, David)
  • MAX(Id) → หา ID สูงสุดในแต่ละกลุ่ม (John=10, Sam=20, David=30)
  • ORDER BY MAX(Id) DESC → เรียง David(30), Sam(20), John(10)
  • LIMIT 2 → เอา 2 อันแรก

วิธีอื่น: ROW_NUMBER() (MySQL 8.0+)

WITH ranked AS (
    SELECT Name, Id,
           ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Id DESC) AS rn
    FROM DemoTable
)
SELECT Name FROM ranked WHERE rn = 1 ORDER BY Id DESC LIMIT 2;

ข้อควรระวัง

  • SELECT DISTINCT Name ... ORDER BY Id → Error (Id ไม่อยู่ใน SELECT / GROUP BY)
  • MySQL ONLY_FULL_GROUP_BY mode ต้องระบุทุกคอลัมน์ใน SELECT ให้อยู่ใน GROUP BY หรือ Aggregate Function