sql >> Database teknologi >  >> RDS >> Mysql

Sådan får du Record med Max Value i MySQL

Mange gange skal du muligvis vælge rækker med maks. kolonneværdi i SQL. Da der ikke er nogen indbygget funktion til det, skal du få poster med max værdi ved hjælp af SQL-forespørgsel. Sådan får du rekord med max værdi i MySQL. Du kan også bruge den til at få rækker med max værdi i PostgreSQL, SQL Server.

Sådan får du Record med Max Value i MySQL

Her er trinene til at få rekord med max værdi i MySQL.

Lad os sige, at du har følgende tabel salg(ordre_dato,udsalg) der indeholder daglige salgsdata.

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

Der er to måder at vælge rækker med maks. kolonneværdi i SQL. Vi vil se på dem begge.

Bonus Læs:Sådan får du sidste 12 måneders data i MySQL

Sådan får du post med maks. værdi ved hjælp af SQL-underforespørgsel

Her er SQL-forespørgslen for at få rækker med maks. salg værdi ved hjælp af SQL-underforespørgsel.

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 ovenstående forespørgsel vælger vi først den maksimale værdi for tabel i underforespørgsel (med fed skrift ). Derefter vælger vi de rækker fra den oprindelige salgstabel, hvor salgskolonnens værdi er maks. værdi. For store tabeller kan du forbedre forespørgselsydeevnen ved at indeksere salg kolonne.

Hvis du vil filtrere data i henhold til specifikke betingelser, skal du tilføje en WHERE-klausul i din underforespørgsel som vist nedenfor.

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

Bonuslæser:Sådan opdaterer du visning i MySQL

Sådan får du optagelse med maks. værdi for hver GRUPPE

Her er trinene til at få række med maks. værdi ved hjælp af GROUP BY i MySQL.

Lad os sige, at du har en tabel product_sales(product, order_date,sale) der indeholder salgsdata for flere produkter. Og du ønsker at få poster med maksimal salgsværdi for hvert 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æser:Sådan får du kumulative samlede brugere pr. dag i MySQL

Her er SQL-forespørgslen for at få post med maks. værdi ved hjælp af GROUP BY, for hver gruppe, det vil sige hvert 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 ovenstående forespørgsel beregner vi først den maksimale salgsværdi for hvert produkt ved hjælp af indlejret underforespørgsel (med fed skrift ), og sæt derefter resultatet sammen med originale produktsalg tabel baseret på produkt- og salgskolonner.

Forhåbentlig kan du få rækker med maksimal kolonneværdi for dine tabeller.

Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!

  1. "ADVARSEL:Uoverensstemmelse fundet mellem sl_table og pg_class." i Slony-I

  2. Pivotdata i T-SQL

  3. Hvordan make_timestamp() virker i PostgreSQL

  4. Brug af Alias ​​In When Del af en sagserklæring i Oracle SQL