Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como obter registro com valor máximo no MySQL


Muitas vezes você pode precisar selecionar linhas com valor máximo de coluna no SQL. Como não há função interna para isso, você precisa obter registros com valor máximo usando a consulta SQL. Veja como obter o registro com o valor máximo no MySQL. Você também pode usá-lo para obter linhas com valor máximo no PostgreSQL, SQL Server.


Como obter registro com valor máximo no MySQL


Aqui estão as etapas para obter o registro com valor máximo no MySQL.

Digamos que você tenha a seguinte tabela vendas(data_pedido,venda) que contém dados diários de vendas.
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 |
+------------+------+--------+

Existem duas maneiras de selecionar linhas com valor máximo de coluna no SQL. Vamos olhar para os dois.

Bônus de leitura:Como obter dados dos últimos 12 meses no MySQL


Como obter o registro com o valor máximo usando a subconsulta SQL


Aqui está a consulta SQL para obter linhas com max sale valor usando a subconsulta 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 |
+------------+------+--------+

Na consulta acima, primeiro selecionamos o valor máximo da tabela na subconsulta (em negrito ). Em seguida, selecionamos as linhas da tabela de vendas original em que o valor da coluna de venda é o valor máximo. Para tabelas grandes, você pode melhorar o desempenho da consulta indexando venda coluna.

Se você deseja filtrar dados de acordo com condições específicas, adicione uma cláusula WHERE em sua subconsulta, conforme mostrado abaixo.
mysql> select * from sales 
       where sale=(
          select max(sale) from sales
          WHERE <condition>
        );

Bônus de leitura:Como atualizar a visualização no MySQL


Como obter o registro com valor máximo para cada GRUPO


Aqui estão as etapas para obter a linha com o valor máximo usando GROUP BY no MySQL.

Digamos que você tenha uma tabela product_sales(product, order_date,sale) que contém dados de vendas para vários produtos. E você deseja obter registros com valor máximo de venda para cada produto.
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 |
+---------+------------+------+

Bônus de leitura:Como obter o total acumulado de usuários por dia no MySQL



Aqui está a consulta SQL para obter o registro com valor máximo usando GROUP BY, para cada grupo, ou seja, cada produto.
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 |
+---------+------------+------+

Na consulta acima, primeiro calculamos o valor máximo de venda para cada produto usando a subconsulta aninhada (em negrito ) e, em seguida, junte o resultado com product_sales original tabela com base nas colunas de produto e venda.

Espero que você possa obter linhas com valor máximo de coluna para suas tabelas.

O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!