Dalam penyelesaian ini, kami menggunakan operasi gabungan untuk mendapatkan semula baris dengan nilai tertinggi atau terendah untuk lajur tertentu dalam setiap kumpulan, tanpa menggunakan kedudukan atau subkueri.
Untuk mencari baris dengan nilai OrderField tertinggi setiap kumpulan:
SELECT t1.* FROM `Table` AS t1 LEFT OUTER JOIN `Table` AS t2 ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField WHERE t2.GroupId IS NULL ORDER BY t1.OrderField;
Sekiranya berbilang rekod berkongsi nilai OrderField maksimum yang sama dalam kumpulan, anda mungkin mahu memperhalusi lagi syarat:
SELECT t1.* FROM `Table` AS t1 LEFT OUTER JOIN `Table` AS t2 ON t1.GroupId = t2.GroupId AND (t1.OrderField < t2.OrderField OR (t1.OrderField = t2.OrderField AND t1.Id < t2.Id)) WHERE t2.GroupId IS NULL
Pendekatan ini memastikan bahawa baris dengan nilai OrderField yang paling besar dikembalikan apabila terdapat ikatan dalam kumpulan.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Nilai Maks/Min setiap Kumpulan Menggunakan SQL Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!