sql >> Databáze >  >> RDS >> Mysql

Jak vybrat prvních N řádků na skupinu v MySQL

Někdy možná budete muset vybrat prvních N řádků z každé skupiny v MySQL. Zde je návod, jak vybrat prvních N řádků na skupinu v MySQL. Můžete jej použít k získání n nejlepších výsledků na skupinu, vybrat 10 nejlepších záznamů pro každou kategorii nebo vybrat první záznam každé skupiny.

MySQL vyberte prvních N řádků na skupinu

Zde jsou kroky k výběru horních N řádků na skupinu. Řekněme, že máte následující tabulku objednávky (id, produkt, částka)

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 |
+------+---------+--------+

Bonusové čtení:Jak získat data z minulého týdne v MySQL

Jak vybrat prvních N řádků na skupinu v MySQL

Nejprve seřadíme každý řádek v rámci jeho skupiny (produkt sloupec) pomocí následujícího dotazu SQL.

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                           |
+------+---------+--------+--------------+-----------------------------+

Ve výše uvedeném dotazu jsme nejprve seřadili každý záznam v jeho skupině podle sloupce částky v sestupném pořadí a poté jsme jej seřadili. Pokud jej chcete seřadit vzestupně podle částek, můžete to provést změnou klauzule 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;

Dále použijeme výše uvedený dotaz jako dílčí dotaz k výběru prvních N řádků na skupinu (např. horní 2 řádky pro každou kategorii).

Bonusové čtení:Kopírovací databáze MySQL

Jak vybrat horní 2 řádky na skupinu

Zde je dotaz SQL pro výběr horních 2 řádků pro každou skupinu pomocí výše uvedené metody. Výše uvedený dotaz použijeme jako dílčí dotaz a vybereme řádky, jejichž hodnocení je menší nebo rovno 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 |
+------+---------+--------+

Bonusové čtení:MySQL Insert to Select

Jak vybrat prvních 10 řádků na skupinu

Podobně můžete vybrat prvních 10 řádků z každé skupiny pomocí následujícího dotazu.

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;

Doufejme, že nyní můžete snadno vybrat prvních N řádků na skupinu v MySQL.

Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!

  1. aktualizovat více řádků pomocí limitu v mysql?

  2. Vraťte aktuální název pracovní stanice, která je připojena k serveru SQL (T-SQL)

  3. REGEX, chcete-li vybrat n-tou hodnotu ze seznamu, s možností null

  4. Různé způsoby použití funkce data SQL CONVERT