Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Memilih Baris N Teratas Per Grup di MySQL

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!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyimpan nilai hash SHA1 di MySQL

  2. Berbagai Cara untuk Mengisi Pengguna MySQL

  3. MySQL SEPERTI DI ()?

  4. GALAT:Galat 1005:Tidak dapat membuat tabel (errno:121)

  5. PostgreSQL vs. MySQL