Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Cekap Mencari Nilai Minimum dan Maksimum setiap Kumpulan dalam SQL Tanpa Menggunakan Fungsi Kedudukan?
Tutorial ini menangani persoalan bagaimana untuk mendapatkan semula rekod dengan nilai tertinggi atau terkecil untuk medan tertentu dalam setiap kumpulan, tanpa bergantung pada kedudukan (@Rank). Walaupun soalan awal ini menggunakan @Rank sebagai penyelesaian, respons seterusnya menunjukkan pendekatan yang lebih cekap menggunakan gabungan.
Untuk mendapatkan baris dengan OrderField tertinggi bagi setiap kumpulan, gunakan bahagian luar kiri sertai dan pertanyaan berikut:
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;
Jika berbilang rekod mempunyai OrderField yang sama dalam kumpulan dan anda memerlukan salah satu daripada mereka, anda boleh melanjutkan syarat seperti berikut:
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
Pertanyaan yang diperhalusi ini memastikan bahawa t1 dikembalikan hanya apabila tiada baris lain t2 wujud dalam kumpulan GroupId yang sama yang mempunyai nilai OrderField yang lebih tinggi atau OrderField yang sama. dengan nilai Id yang lebih rendah. Oleh itu, ia secara berkesan mendapatkan semula baris dengan OrderField terhebat dalam setiap kumpulan.
Menggunakan pendekatan gabungan luar kiri boleh meningkatkan prestasi pertanyaan dengan ketara berbanding kaedah terdahulu yang melibatkan @Rank dan subquery. Sambungan luar kiri boleh memanfaatkan indeks pada (GroupId, OrderField) untuk akses yang dioptimumkan.
Pendekatan awal menggunakan @Rank mungkin tidak berfungsi seperti yang diharapkan kerana fakta bahawa @Kenaikan pangkat diteruskan selepas jadual pertama diproses. Untuk menetapkan semula @Rank kepada sifar antara jadual, anda perlu memperkenalkan jadual terbitan tambahan, tetapi ini boleh mengakibatkan pengoptimuman yang lemah.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Nilai Minimum dan Maksimum setiap Kumpulan dalam SQL Tanpa Menggunakan Fungsi Kedudukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!