sql >> Databasteknik >  >> RDS >> Mysql

Hur man får rekord med maxvärde i MySQL

Många gånger kan du behöva välja rader med max kolumnvärde i SQL. Eftersom det inte finns någon inbyggd funktion för det behöver du få poster med maxvärde med hjälp av SQL-fråga. Så här får du rekord med maxvärde i MySQL. Du kan också använda den för att få rader med maxvärde i PostgreSQL, SQL Server.

Hur får man rekord med maxvärde i MySQL

Här är stegen för att få post med maxvärde i MySQL.

Låt oss säga att du har följande tabell försäljning(orderdatum, rea) som innehåller dagliga försäljningsdata.

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

Det finns två sätt att välja rader med max kolumnvärde i SQL. Vi kommer att titta på dem båda.

Bonus Läs:Hur man får senaste 12 månaders data i MySQL

Hur får man post med maxvärde med hjälp av SQL-underfrågan

Här är SQL-frågan för att få rader med max försäljning värde med SQL-underfråga.

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

I ovanstående fråga väljer vi först maxvärdet för tabellen i underfrågan (med fetstil ). Sedan väljer vi de raderna från den ursprungliga försäljningstabellen där försäljningskolumnens värde är maxvärdet. För stora tabeller kan du förbättra frågeprestanda genom att indexera försäljning kolumn.

Om du vill filtrera data enligt specifika villkor, lägg till en WHERE-sats i din underfråga som visas nedan.

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

Bonus Läs:Hur man uppdaterar vy i MySQL

Hur får man post med maxvärde för varje GRUPP

Här är stegen för att få rad med maxvärde med GROUP BY i MySQL.

Låt oss säga att du har en tabell product_sales(product, order_date,sale) som innehåller försäljningsdata för flera produkter. Och du vill få poster med max försäljningsvärde för varje produkt.

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

Bonusläsning:Hur man får kumulativt totalt antal användare per dag i MySQL

Här är SQL-frågan för att få post med maxvärde med GROUP BY, för varje grupp, det vill säga varje produkt.

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

I ovanstående fråga beräknar vi först det högsta försäljningsvärdet för varje produkt med hjälp av kapslad underfråga (i fetstil ), och slå sedan ihop resultatet med original produktförsäljning tabell baserad på produkt- och försäljningskolumner.

Förhoppningsvis kan du få rader med max kolumnvärde för dina tabeller.

Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. Vad är aktuell vy APPL_TOP ögonblicksbilder

  2. FEL:oavslutad citerad sträng vid eller nära

  3. Finns det en postgres NÄRMASTE operatör?

  4. MySQL-kolumner med DEFAULT NULL - stilistiskt val, eller är det?