Много пъти може да се наложи да изберете редове с максимална стойност на колоната в 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 улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!