sql >> Databáze >  >> RDS >> Mysql

Jak získat záznam s maximální hodnotou v MySQL

Mnohokrát možná budete muset vybrat řádky s maximální hodnotou sloupce v SQL. Protože pro to není žádná vestavěná funkce, musíte získat záznamy s maximální hodnotou pomocí dotazu SQL. Zde je návod, jak získat záznam s maximální hodnotou v MySQL. Můžete jej také použít k získání řádků s maximální hodnotou v PostgreSQL, SQL Server.

Jak získat záznam s maximální hodnotou v MySQL

Zde jsou kroky k získání záznamu s maximální hodnotou v MySQL.

Řekněme, že máte následující tabulku prodej(datum_objednávky,výprodej) který obsahuje denní údaje o prodeji.

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

Existují dva způsoby, jak vybrat řádky s maximální hodnotou sloupce v SQL. Podíváme se na ně oba.

Bonusové čtení:Jak získat data za posledních 12 měsíců v MySQL

Jak získat záznam s maximální hodnotou pomocí poddotazu SQL

Zde je dotaz SQL pro získání řádků s maximálním prodejem hodnotu pomocí poddotazu SQL.

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

Ve výše uvedeném dotazu nejprve vybereme maximální hodnotu pro tabulku v dílčím dotazu (tučně ). Poté vybereme ty řádky z původní tabulky prodejů, kde hodnota sloupce prodeje je maximální hodnota. U velkých tabulek můžete zlepšit výkon dotazů indexováním prodej sloupec.

Pokud chcete data filtrovat podle konkrétních podmínek, přidejte do poddotazu klauzuli WHERE, jak je uvedeno níže.

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

Bonusové čtení:Jak aktualizovat zobrazení v MySQL

Jak získat záznam s maximální hodnotou pro každou SKUPINU

Zde jsou kroky k získání řádku s maximální hodnotou pomocí GROUP BY v MySQL.

Řekněme, že máte tabulku product_sales(product, order_date, sale) který obsahuje údaje o prodeji více produktů. A chcete získat záznamy s maximální prodejní hodnotou pro každý 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 |
+---------+------------+------+

Bonusové čtení:Jak získat kumulativní celkový počet uživatelů za den v MySQL

Zde je dotaz SQL pro získání záznamu s maximální hodnotou pomocí GROUP BY pro každou skupinu, tedy každý 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 |
+---------+------------+------+

Ve výše uvedeném dotazu nejprve vypočítáme maximální hodnotu prodeje pro každý produkt pomocí vnořeného dílčího dotazu (tučně ) a poté výsledek spojte s původním prodejem_produktů tabulky založené na sloupcích produktu a prodeje.

Doufejme, že pro své tabulky můžete získat řádky s maximální hodnotou sloupce.

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!

  1. Nastavení Django a PostgreSQL na dvou různých instancích EC2

  2. Jak zrychlit SQL dotazy

  3. Jak resetovat kořenové heslo MySQL

  4. Jak funguje funkce Ln() v PostgreSQL