sql >> Base de Datos >  >> RDS >> Mysql

Cómo obtener un registro con el valor máximo en MySQL

Muchas veces es posible que deba seleccionar filas con el valor máximo de columna en SQL. Dado que no hay una función integrada para ello, debe obtener registros con el valor máximo mediante la consulta SQL. Aquí se explica cómo obtener un registro con el valor máximo en MySQL. También puede usarlo para obtener filas con valor máximo en PostgreSQL, SQL Server.

Cómo obtener un registro con el valor máximo en MySQL

Estos son los pasos para obtener un registro con el valor máximo en MySQL.

Supongamos que tiene la siguiente tabla sales(order_date,sale) que contiene datos de ventas diarias.

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

Hay dos formas de seleccionar filas con valor máximo de columna en SQL. Los miraremos a ambos.

Lectura adicional:Cómo obtener datos de los últimos 12 meses en MySQL

Cómo obtener un registro con el valor máximo usando una subconsulta SQL

Aquí está la consulta SQL para obtener filas con max sale valor usando la 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 |
+------------+------+--------+

En la consulta anterior, primero seleccionamos el valor máximo para la tabla en la subconsulta (en negrita ). Luego seleccionamos esas filas de la tabla de ventas original donde el valor de la columna de venta es el valor máximo. Para tablas grandes, puede mejorar el rendimiento de las consultas indexando venta columna.

Si desea filtrar datos según condiciones específicas, agregue una cláusula WHERE en su subconsulta como se muestra a continuación.

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

Lectura adicional:Cómo actualizar la vista en MySQL

Cómo obtener un registro con el valor máximo para cada GRUPO

Estos son los pasos para obtener una fila con el valor máximo usando GROUP BY en MySQL.

Supongamos que tiene una tabla product_sales(product, order_date,sale) que contiene datos de ventas de varios productos. Y desea obtener registros con el valor de venta máximo para cada producto.

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

Lectura adicional:Cómo obtener usuarios totales acumulados por día en MySQL

Aquí está la consulta SQL para obtener un registro con el valor máximo usando GROUP BY, para cada grupo, es decir, cada producto.

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

En la consulta anterior, primero calculamos el valor de venta máximo para cada producto usando una subconsulta anidada (en negrita ), y luego únase al resultado con product_sales original tabla basada en columnas de producto y venta.

Con suerte, puede obtener filas con el valor máximo de columna para sus tablas.

Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!