Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите запис с максимална стойност в MySQL

Много пъти може да се наложи да изберете редове с максимална стойност на колоната в SQL. Тъй като няма вградена функция за него, трябва да получите записи с максимална стойност, като използвате SQL заявка. Ето как да получите запис с максимална стойност в MySQL. Можете също да го използвате, за да получите редове с максимална стойност в PostgreSQL, SQL Server.

Как да получите запис с максимална стойност в MySQL

Ето стъпките за получаване на запис с максимална стойност в MySQL.

Да приемем, че имате следната таблица sales(order_date,sale) която съдържа ежедневни данни за продажбите.

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

Има два начина за избор на редове с максимална стойност на колоната в SQL. Ще ги разгледаме и двете.

Бонус четене:Как да получите данни за последните 12 месеца в MySQL

Как да получите запис с максимална стойност с помощта на SQL подзаявка

Ето SQL заявката за получаване на редове с максимална продажба стойност с помощта на 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 |
+------------+------+--------+

В горната заявка първо избираме максималната стойност за таблица в подзаявката (с удебелен ). След това избираме тези редове от оригиналната таблица за продажби, където стойността на колоната за продажба е максимална стойност. За големи таблици можете да подобрите ефективността на заявката, като индексирате sale колона.

Ако искате да филтрирате данни според конкретни условия, добавете клауза WHERE във вашата подзаявка, както е показано по-долу.

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

Бонус четене:Как да актуализирате изглед в MySQL

Как да получите запис с максимална стойност за всяка ГРУПА

Ето стъпките за получаване на ред с максимална стойност с помощта на GROUP BY в MySQL.

Да приемем, че имате таблица product_sales(product, order_date,sale) който съдържа данни за продажбите за множество продукти. И искате да получите записи с максимална стойност на продажба за всеки продукт.

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

Бонус за четене:Как да получите кумулативни общи потребители на ден в MySQL

Ето SQL заявката за получаване на запис с максимална стойност, използвайки GROUP BY, за всяка група, тоест за всеки продукт.

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

В горната заявка първо изчисляваме максималната стойност на продажба за всеки продукт, използвайки вложена подзаявка (с удебелен шрифт ), и след това обединете резултата с оригиналния product_sales таблица въз основа на колони за продукти и продажби.

Надяваме се, че можете да получите редове с максимална стойност на колоната за вашите таблици.

Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите последния запис във всяка група в MySQL

  2. Работа с MyISAM в MySQL

  3. Основни команди за администриране на база данни на MySQL – част I

  4. Създайте нова таблица, като изберете данни от други таблици с CREATE TABLE AS

  5. Получаване на общия брой редове при използване на LIMIT?