Dapatkan Rekod dengan Nilai Tertinggi/Terkecil bagi setiap Kumpulan
Masalah:
Dapatkan semula rekod dengan nilai tertinggi atau terkecil untuk medan tertentu dalam setiap medan kumpulan.
Bekas Cadangan Penyelesaian:
Menggunakan pangkat (@pangkat := @pangkat 1) dalam pertanyaan kompleks dengan subkueri.
Penyelesaian Alternatif:
Pendekatan yang lebih cekap ialah menggunakan gabungan luar kiri tanpa kedudukan pembolehubah:
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;
Pertanyaan ini mencapai hasil yang diingini dengan memanfaatkan strategi pengindeksan pada (GroupId, OrderField) untuk mengoptimumkan akses kepada t2.
Pengoptimuman Pertimbangan:
AND (t1.OrderField < t2.OrderField OR (t1.OrderField = t2.OrderField AND t1.Id < t2.Id))
Kelebihan Pendekatan Left Outer Join:
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod dengan Cekap dengan Nilai Tertinggi atau Terendah bagi setiap Kumpulan dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!