Rumah > Artikel > pangkalan data > Bagaimana untuk Memilih Baris dengan Nilai Tertinggi dalam Setiap Kumpulan dalam MySQL?
MySQL: Mengawal Baris Mana Yang Dikembalikan dalam Kumpulan OLEH Pertanyaan
Dalam MySQL, mendapatkan semula baris dengan nilai tertinggi daripada setiap kumpulan ialah tugas biasa. Walau bagaimanapun, menggunakan klausa GROUP BY standard dengan ORDER BY kadangkala boleh membawa kepada hasil yang tidak dijangka.
Untuk mencapai matlamat ini, kami boleh menggunakan pendekatan alternatif yang mengatasi gelagat kumpulan lalai:
Subquery Kaedah:
Kaedah ini melibatkan mencipta subquery untuk mendapatkan version_id maksimum untuk setiap unik id:
SELECT * FROM (SELECT id, MAX(version_id) AS version_id FROM table GROUP BY id) t1 INNER JOIN table t2 ON (t2.id = t1.id AND t1.version_id = t2.version_id)
Pertanyaan ini menyertai jadual asal dengan subquery yang memilih version_id maksimum untuk setiap id. Gabungan memastikan bahawa hanya baris dengan version_id tertinggi dikembalikan.
Subquery dengan ORDER BY Trik:
Variasi kaedah subquery melibatkan penggunaan ORDER BY dalam subquery untuk memastikan pesanan khusus:
SELECT * FROM (SELECT * FROM table ORDER BY version_id DESC) t1 GROUP BY t1.id
Pertanyaan ini menyusun dengan berkesan baris dalam tertib menurun version_id dalam setiap kumpulan sebelum melakukan pengumpulan, memastikan baris dengan version_id tertinggi dikekalkan untuk setiap kumpulan.
Fungsi Windows Dinamakan:
Fungsi tetingkap membenarkan pengiraan dilakukan dalam satu set baris yang ditakrifkan oleh tetingkap, yang boleh digunakan untuk ini tugas:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY version_id DESC) AS rn FROM table ) t WHERE rn = 1
Pertanyaan ini mengira nombor baris untuk setiap id unik dalam partition yang ditakrifkan oleh ROW_NUMBER. Klausa WHERE menapis baris dengan nombor baris selain 1, memastikan bahawa hanya baris dengan version_id tertinggi untuk setiap id dikembalikan.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris dengan Nilai Tertinggi dalam Setiap Kumpulan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!