Terkadang Anda mungkin perlu memilih N baris teratas dari setiap grup di MySQL. Berikut cara memilih N baris teratas per grup di MySQL. Anda dapat menggunakannya untuk mendapatkan n hasil teratas per grup, pilih 10 catatan teratas untuk setiap kategori atau pilih catatan pertama setiap grup.
MySQL Pilih N Baris Teratas Per Grup
Berikut adalah langkah-langkah untuk memilih N baris teratas per grup. Katakanlah Anda memiliki tabel berikut pesanan(id, produk, jumlah)
mysql> create table product_orders(id int,product varchar(255),amount int); mysql> insert into product_orders(id, product, amount) values(1,'A',250),(2,'B',150),(3,'C',200), (4,'A',250),(5,'B',210),(6,'C',125), (7,'A',350),(8,'B',225),(9,'C',150); mysql> select * from product_orders; +------+---------+--------+ | id | product | amount | +------+---------+--------+ | 1 | A | 250 | | 2 | B | 150 | | 3 | C | 200 | | 4 | A | 250 | | 5 | B | 210 | | 6 | C | 125 | | 7 | A | 350 | | 8 | B | 225 | | 9 | C | 150 | +------+---------+--------+
Bonus Baca :Cara Mendapatkan Data Minggu Terakhir di MySQL
Cara Memilih N Baris Teratas Per Grup di MySQL
Pertama, kami akan memberi peringkat setiap baris dalam grupnya (produk kolom) menggunakan kueri SQL berikut.
mysql> SELECT id, product, amount, @product_rank := IF(@current_product = product, @product_rank + 1, 1) AS product_rank, @current_product := product FROM product_orders ORDER BY product, amount desc; +------+---------+--------+--------------+-----------------------------+ | id | product | amount | product_rank | @current_product := product | +------+---------+--------+--------------+-----------------------------+ | 7 | A | 350 | 1 | A | | 1 | A | 250 | 2 | A | | 4 | A | 250 | 3 | A | | 8 | B | 225 | 1 | B | | 5 | B | 210 | 2 | B | | 2 | B | 150 | 3 | B | | 3 | C | 200 | 1 | C | | 9 | C | 150 | 2 | C | | 6 | C | 125 | 3 | C | +------+---------+--------+--------------+-----------------------------+
Dalam kueri di atas, pertama-tama kita mengurutkan setiap record dalam grupnya berdasarkan kolom jumlah dalam urutan menurun, dan kemudian memeringkatnya. Jika Anda ingin mengurutkannya secara menaik, Anda dapat melakukannya dengan mengubah klausa ORDER by.
SELECT id, product, amount, @product_rank := IF(@current_product = product, @product_rank + 1, 1) AS product_rank, @current_product := product FROM product_orders ORDER BY product, amount asc;
Selanjutnya, kita menggunakan kueri di atas sebagai subkueri, untuk memilih N baris teratas per grup (misalnya 2 baris teratas untuk setiap kategori).
Bonus Baca :MySQL Copy Database
Cara memilih 2 baris teratas per grup
Berikut kueri SQL untuk memilih 2 baris teratas untuk setiap grup menggunakan metode di atas. Kami akan menggunakan kueri di atas sebagai subkueri dan memilih baris yang peringkatnya kurang dari atau sama dengan 2.
mysql> select id, product, amount from ( SELECT id, product, amount, @product_rank := IF(@current_product = product, @product_rank + 1, 1) AS product_rank, @current_product := product FROM product_orders ORDER BY product, amount desc) ranked_rows where product_rank<=2; +------+---------+--------+ | id | product | amount | +------+---------+--------+ | 7 | A | 350 | | 1 | A | 250 | | 8 | B | 225 | | 5 | B | 210 | | 3 | C | 200 | | 9 | C | 150 | +------+---------+--------+
Bonus Baca :Sisipkan MySQL ke Pilih
Cara memilih 10 baris teratas per grup
Demikian pula, Anda dapat memilih 10 baris teratas dari setiap grup menggunakan kueri berikut.
mysql> select id, product, amount from ( SELECT id, product, amount, @product_rank := IF(@current_product = product, @product_rank + 1, 1) AS product_rank, @current_product := product FROM product_orders ORDER BY product, amount desc) ranked_rows where product_rank<=10;
Mudah-mudahan, sekarang Anda dapat dengan mudah memilih N baris teratas per grup di MySQL.
Ubiq memudahkan untuk memvisualisasikan data dalam hitungan menit, dan memantau di dasbor waktu nyata. Cobalah Hari ini!