Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie die Top 10 Datensätze für jede Kategorie in MySQL aus

Wenn Sie ein E-Commerce-Geschäft oder einen Online-Shop betreiben, müssen Sie möglicherweise die Top-10-Datensätze für jede Kategorie von Produkten, Marken usw. für Berichte und Analysen auswählen. In diesem Artikel sehen wir uns an, wie man die Top 10 Datensätze für jede Kategorie in MySQL auswählt.


Wählen Sie die 10 besten Rekorde für jede Kategorie aus

Hier sind die Schritte zur Auswahl der 10 besten Datensätze für jede Kategorie. Nehmen wir an, Sie haben die folgende Tabelle sales(id, product, order_date, amount) .

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

Bonus-Lesetext:Allgemeiner Tabellenausdruck in MySQL

Wir werden die Top 10 Datensätze nach Anzahl auswählen Spalte für jede Kategorie (Produkt). Zuerst ordnen wir jede Zeile innerhalb ihrer Gruppe (Produkt).

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

In der obigen Abfrage verwenden wir temporäre Variablen product_rank und aktuelles_Produkt um den neuesten Rangwert und Produktwert zu verfolgen.

Bonus-Lesetext:So berechnen Sie die Margin in MySQL

Als Nächstes verwenden wir die obige Abfrage als Unterabfrage, um die Top-10-Datensätze für jedes Produkt auszuwählen.

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

Bonuslektüre:So wählen Sie die meistverkauften Produkte mit SQL aus

Wir haben die Bedingung where product_rank<=10 verwendet um nur die Top 10 Datensätze auszuwählen. Sie können es ändern, um so viele Zeilen auszuwählen, wie Sie möchten.

Benötigen Sie ein Reporting-Tool für MySQL? Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!