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

MySQL ORDER BY ภายใน GROUP BY ไม่ได้ ใช้ MAX() แทน

MySQL ไม่รองรับ ORDER BY ภายใน GROUP BY โดยตรง ใช้ Aggregate Function MAX() หรือ MIN() เพื่อเลือกค่าตามเงื่อนไข

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

สร้างตาราง:

mysql> create table MaxDemo (
    -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserName varchar(20), UserRank int
    -> );

เพิ่มข้อมูล (Sam มี 2 แถว Rank 1 และ 2):

mysql> INSERT INTO MaxDemo(UserName,UserRank) VALUES ('Larry',2),('Sam',1),('Sam',2);

ข้อมูล:

+--------+----------+----------+
| UserId | UserName | UserRank |
+--------+----------+----------+
|      1 | Larry    |        2 |
|      2 | Sam      |        1 |
|      3 | Sam      |        2 |
+--------+----------+----------+

GROUP BY UserName ใช้ MAX(UserRank) เลือก Rank สูงสุด:

mysql> SELECT UserName, MAX(UserRank) FROM MaxDemo GROUP BY UserName;

ผลลัพธ์:

+----------+---------------+
| UserName | MAX(UserRank) |
+----------+---------------+
| Larry    |             2 |
| Sam      |             2 |
+----------+---------------+

กรณีต้องการค่าที่เกี่ยวข้องกับ MAX (เช่น วันที่ล่าสุด)

ใช้ Subquery หรือ JOIN:

SELECT t1.UserName, t1.UserRank, t1.OtherColumn
FROM MaxDemo t1
JOIN (SELECT UserName, MAX(UserRank) AS MaxRank FROM MaxDemo GROUP BY UserName) t2
ON t1.UserName = t2.UserName AND t1.UserRank = t2.MaxRank;

MySQL 8.0+: ใช้ Window Function ROW_NUMBER() OVER (PARTITION BY UserName ORDER BY UserRank DESC) แล้วกรอง rn=1