sql >> Database >  >> RDS >> Mysql

Hoe een record te krijgen met maximale waarde in MySQL

Vaak moet u mogelijk rijen selecteren met een maximale kolomwaarde in SQL. Omdat er geen ingebouwde functie voor is, moet u records met maximale waarde ophalen met behulp van SQL-query. Hier leest u hoe u een record met maximale waarde in MySQL kunt krijgen. Je kunt het ook gebruiken om rijen met een maximale waarde op te halen in PostgreSQL, SQL Server.

Hoe krijg ik een record met maximale waarde in MySQL

Hier zijn de stappen om een ​​record met maximale waarde in MySQL te krijgen.

Stel dat u de volgende tabel sales(order_date,sale) . heeft die dagelijkse verkoopgegevens bevat.

mysql> create table sales(order_date date,sale int, orders int);

mysql> insert into sales(order_date,sale,orders) values('2020-05-29', 300, 10),
     ('2020-05-30',250, 15),( '2020-05-31', 250, 12),( '2020-06-01',250, 14),
     ('2020-06-02',150,20),('2020-06-03',300,21),('2020-06-04',200,15),
     ('2020-06-05',200,17),('2020-06-06',250,12),('2020-06-07',150,15),
     ('2020-06-08',300,12),('2020-06-09',200,18);

mysql> select * from sales;
+------------+------+--------+
| order_date | sale | orders |
+------------+------+--------+
| 2020-05-29 |  300 |     10 |
| 2020-05-30 |  250 |     15 |
| 2020-05-31 |  250 |     12 |
| 2020-06-01 |  250 |     14 |
| 2020-06-02 |  150 |     20 |
| 2020-06-03 |  300 |     21 |
| 2020-06-04 |  200 |     15 |
| 2020-06-05 |  200 |     17 |
| 2020-06-06 |  250 |     12 |
| 2020-06-07 |  150 |     15 |
| 2020-06-08 |  300 |     12 |
| 2020-06-09 |  200 |     18 |
+------------+------+--------+

Er zijn twee manieren om rijen met een maximale kolomwaarde in SQL te selecteren. We zullen ze allebei bekijken.

Bonus lezen:hoe u gegevens van de afgelopen 12 maanden in MySQL kunt krijgen

Hoe een record met maximale waarde te krijgen met behulp van SQL-subquery

Hier is de SQL-query om rijen te krijgen met max verkoop waarde met behulp van SQL-subquery.

mysql> select * from sales where sale=(select max(sale) from sales);
+------------+------+--------+
| order_date | sale | orders |
+------------+------+--------+
| 2020-05-29 |  300 |     10 |
| 2020-06-03 |  300 |     21 |
| 2020-06-08 |  300 |     12 |
+------------+------+--------+

In de bovenstaande query selecteren we eerst de maximale waarde voor tabel in subquery (in vet ). Vervolgens selecteren we die rijen uit de originele verkooptabel waar de waarde van de verkoopkolom de maximale waarde is. Voor grote tabellen kunt u de queryprestaties verbeteren door verkoop te indexeren kolom.

Als u gegevens wilt filteren volgens specifieke voorwaarden, voegt u een WHERE-component toe aan uw subquery, zoals hieronder weergegeven.

mysql> select * from sales 
       where sale=(
          select max(sale) from sales
          WHERE <condition>
        );

Bonus lezen:weergave bijwerken in MySQL

Hoe een record te krijgen met de maximale waarde voor elke GROEP

Hier zijn de stappen om rij met maximale waarde te krijgen met GROUP BY in MySQL.

Stel dat u een tabel heeft product_sales(product, order_date,sale) die verkoopgegevens voor meerdere producten bevat. En u wilt records krijgen met een maximale verkoopwaarde voor elk product.

mysql> create table product_sales(product varchar(255),order_date date, sale int);

mysql> insert into product_sales(product,order_date, sale)
     values('A','2020-05-01',250),
     ('B','2020-05-01',350),
     ('C','2020-05-01',1250),
     ('A','2020-05-02',450),
     ('B','2020-05-02',650),
     ('C','2020-05-02',1050),
     ('A','2020-05-03',150),
     ('B','2020-05-03',250),
     ('C','2020-05-03',1850);

mysql> select * from product_sales;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-05-01 |  250 |
| B       | 2020-05-01 |  350 |
| C       | 2020-05-01 | 1250 |
| A       | 2020-05-02 |  450 |
| B       | 2020-05-02 |  650 |
| C       | 2020-05-02 | 1050 |
| A       | 2020-05-03 |  150 |
| B       | 2020-05-03 |  250 |
| C       | 2020-05-03 | 1850 |
+---------+------------+------+

Bonus lezen:hoe u cumulatief totaal aantal gebruikers per dag in MySQL kunt krijgen

Hier is de SQL-query om een ​​record met maximale waarde te krijgen met GROUP BY, voor elke groep, dat wil zeggen voor elk product.

mysql> select product_sales.* from product_sales,
      (select product,max(sale) as sale 
           from product_sales 
           group by product) max_sales 
        where product_sales.product=max_sales.product 
        and product_sales.sale=max_sales.sale;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-05-02 |  450 |
| B       | 2020-05-02 |  650 |
| C       | 2020-05-03 | 1850 |
+---------+------------+------+

In de bovenstaande zoekopdracht berekenen we eerst de maximale verkoopwaarde voor elk product met behulp van geneste subquery's (in vet ), en voeg vervolgens het resultaat toe met originele product_sales tabel op basis van product- en verkoopkolommen.

Hopelijk kun je rijen krijgen met een maximale kolomwaarde voor je tabellen.

Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!

  1. Voor Nvarchar (Max) krijg ik maar 4000 tekens in TSQL?

  2. Een berekende kolom gebruiken om een ​​andere kolom in dezelfde weergave te berekenen

  3. Oracle 11g op Mac OS X

  4. Hoe update ik alle kolommen met INSERT ... ON CONFLICT ...?