Když provozujete elektronický obchod nebo internetový obchod, možná budete muset vybrat 10 nejlepších záznamů pro každou kategorii produktů, značek atd. pro vytváření přehledů a analýzy. V tomto článku se podíváme na to, jak vybrat 10 nejlepších záznamů pro každou kategorii v MySQL.
Vyberte 10 nejlepších záznamů pro každou kategorii
Zde jsou kroky k výběru 10 nejlepších záznamů pro každou kategorii. Řekněme, že máte následující tabulku prodej (id, produkt, datum_objednávky, částka) .
mysql> create table sales(id int,
product varchar(255),
order_date date,
amount int);
mysql> insert into sales(id, product, order_date, amount)
values(1,'A','2021-01-01',125),
(2,'A','2021-01-02',225),
(3,'A','2021-01-03',325),
(4,'A','2021-01-04',105),
(5,'A','2021-01-05',150),
(6,'A','2021-01-06',215),
(7,'A','2021-01-07',205),
(8,'A','2021-01-08',125),
(9,'A','2021-01-09',350),
(10,'A','2021-01-10',235),
(11,'A','2021-01-11',325),
(12,'B','2021-01-01',150),
(13,'B','2021-01-02',165),
(14,'B','2021-01-03',145),
(15,'B','2021-01-04',115),
(16,'B','2021-01-05',105),
(17,'B','2021-01-06',195),
(18,'B','2021-01-07',185),
(19,'B','2021-01-08',175),
(20,'B','2021-01-09',165),
(21,'B','2021-01-10',115),
(22,'B','2021-01-11',125);
mysql> select * from sales;
+------+---------+------------+--------+
| id | product | order_date | amount |
+------+---------+------------+--------+
| 1 | A | 2021-01-01 | 125 |
| 2 | A | 2021-01-02 | 225 |
| 3 | A | 2021-01-03 | 325 |
| 4 | A | 2021-01-04 | 105 |
| 5 | A | 2021-01-05 | 150 |
| 6 | A | 2021-01-06 | 215 |
| 7 | A | 2021-01-07 | 205 |
| 8 | A | 2021-01-08 | 125 |
| 9 | A | 2021-01-09 | 350 |
| 10 | A | 2021-01-10 | 235 |
| 11 | A | 2021-01-11 | 325 |
| 12 | B | 2021-01-01 | 150 |
| 13 | B | 2021-01-02 | 165 |
| 14 | B | 2021-01-03 | 145 |
| 15 | B | 2021-01-04 | 115 |
| 16 | B | 2021-01-05 | 105 |
| 17 | B | 2021-01-06 | 195 |
| 18 | B | 2021-01-07 | 185 |
| 19 | B | 2021-01-08 | 175 |
| 20 | B | 2021-01-09 | 165 |
| 21 | B | 2021-01-10 | 115 |
| 22 | B | 2021-01-11 | 125 |
+------+---------+------------+--------+
Bonusové čtení:Společný tabulkový výraz v MySQL
Vybereme 10 nejlepších záznamů podle částky sloupec pro každou kategorii (produkt). Nejprve seřadíme každý řádek v rámci jeho skupiny (produktu).
mysql> SELECT id, product, amount,
@product_rank := IF(@current_product = product, @product_rank + 1, 1) AS product_rank,
@current_product := product as current_product
FROM product_orders
ORDER BY product, amount desc;
+------+---------+--------+--------------+-----------------+
| id | product | amount | product_rank | current_product |
+------+---------+--------+--------------+-----------------+
| 9 | A | 350 | 1 | A |
| 3 | A | 325 | 2 | A |
| 11 | A | 325 | 3 | A |
| 10 | A | 235 | 4 | A |
| 2 | A | 225 | 5 | A |
| 6 | A | 215 | 6 | A |
| 7 | A | 205 | 7 | A |
| 5 | A | 150 | 8 | A |
| 1 | A | 125 | 9 | A |
| 8 | A | 125 | 10 | A |
| 4 | A | 105 | 11 | A |
| 17 | B | 195 | 1 | B |
| 18 | B | 185 | 2 | B |
| 19 | B | 175 | 3 | B |
| 20 | B | 165 | 4 | B |
| 13 | B | 165 | 5 | B |
| 12 | B | 150 | 6 | B |
| 14 | B | 145 | 7 | B |
| 22 | B | 125 | 8 | B |
| 15 | B | 115 | 9 | B |
| 21 | B | 115 | 10 | B |
| 16 | B | 105 | 11 | B |
+------+---------+--------+--------------+-----------------+ Ve výše uvedeném dotazu používáme dočasné proměnné product_rank a aktuální_produkt sledovat nejnovější hodnotu pořadí a hodnotu produktu.
Bonusové čtení:Jak vypočítat marži v MySQL
Dále použijeme výše uvedený dotaz jako dílčí dotaz k výběru 10 nejlepších záznamů pro každý produkt.
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 sales ORDER BY product, amount desc )
ranked_rows
where product_rank<=10;
+------+---------+--------+
| id | product | amount |
+------+---------+--------+
| 9 | A | 350 |
| 3 | A | 325 |
| 11 | A | 325 |
| 10 | A | 235 |
| 2 | A | 225 |
| 6 | A | 215 |
| 7 | A | 205 |
| 5 | A | 150 |
| 1 | A | 125 |
| 8 | A | 125 |
| 17 | B | 195 |
| 18 | B | 185 |
| 19 | B | 175 |
| 20 | B | 165 |
| 13 | B | 165 |
| 12 | B | 150 |
| 14 | B | 145 |
| 22 | B | 125 |
| 15 | B | 115 |
| 21 | B | 115 |
+------+---------+--------+ Bonusové čtení:Jak vybrat nejprodávanější produkty pomocí SQL
Použili jsme podmínku where product_rank<=10 vyberte pouze 10 nejlepších záznamů. Můžete jej upravit a vybrat tolik řádků, kolik chcete.
Potřebujete nástroj pro vytváření sestav pro 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!