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

Come ottenere record con valore massimo in MySQL

Molte volte potrebbe essere necessario selezionare le righe con il valore massimo della colonna in SQL. Poiché non esiste una funzione incorporata, è necessario ottenere record con valore massimo utilizzando la query SQL. Ecco come ottenere record con il valore massimo in MySQL. Puoi anche usarlo per ottenere righe con valore massimo in PostgreSQL, SQL Server.

Come ottenere record con valore massimo in MySQL

Ecco i passaggi per ottenere record con valore massimo in MySQL.

Supponiamo che tu abbia la seguente tabella sales(order_date,sale) che contiene i dati sulle vendite giornaliere.

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

Esistono due modi per selezionare le righe con il valore massimo della colonna in SQL. Li esamineremo entrambi.

Bonus Leggi:Come ottenere i dati degli ultimi 12 mesi in MySQL

Come ottenere record con valore massimo utilizzando la sottoquery SQL

Ecco la query SQL per ottenere righe con vendita massima valore utilizzando la sottoquery 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 |
+------------+------+--------+

Nella query precedente, selezioniamo prima il valore massimo per la tabella nella sottoquery (in grassetto ). Quindi selezioniamo quelle righe dalla tabella di vendita originale in cui il valore della colonna di vendita è il valore massimo. Per le tabelle di grandi dimensioni, puoi migliorare le prestazioni delle query indicizzando vendita colonna.

Se desideri filtrare i dati in base a condizioni specifiche, aggiungi una clausola WHERE nella tua sottoquery come mostrato di seguito.

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

Bonus Lettura:come aggiornare la vista in MySQL

Come ottenere record con valore massimo per ogni GRUPPO

Ecco i passaggi per ottenere una riga con il valore massimo utilizzando GROUP BY in MySQL.

Supponiamo che tu abbia una tabella product_sales(product, order_date,sale) che contiene dati di vendita per più prodotti. E vuoi ottenere record con il valore di vendita massimo per ogni prodotto.

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 Leggi:Come ottenere utenti totali cumulativi al giorno in MySQL

Ecco la query SQL per ottenere record con valore massimo utilizzando GROUP BY, per ogni gruppo, ovvero ogni prodotto.

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

Nella query precedente, calcoliamo prima il valore di vendita massimo per ciascun prodotto utilizzando la sottoquery nidificata (in grassetto ), quindi unisci il risultato con product_sales originali tabella basata sulle colonne prodotto e vendita.

Si spera che tu possa ottenere righe con il valore massimo della colonna per le tue tabelle.

Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!