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!