Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để có được bản ghi với giá trị tối đa trong MySQL

Nhiều khi bạn có thể cần chọn các hàng có giá trị cột tối đa trong SQL. Vì không có chức năng tích hợp nào cho nó, bạn cần lấy các bản ghi có giá trị tối đa bằng cách sử dụng truy vấn SQL. Dưới đây là cách lấy bản ghi có giá trị tối đa trong MySQL. Bạn cũng có thể sử dụng nó để lấy các hàng có giá trị tối đa trong PostgreSQL, SQL Server.

Cách Nhận Bản ghi với Giá trị Tối đa trong MySQL

Dưới đây là các bước để lấy bản ghi có giá trị tối đa trong MySQL.

Giả sử bạn có bảng sau doanh số bán hàng (order_date, sale) chứa dữ liệu bán hàng hàng ngày.

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

Có hai cách để chọn hàng có giá trị cột tối đa trong SQL. Chúng tôi sẽ xem xét cả hai.

Phần thưởng đọc:Cách nhận dữ liệu 12 tháng qua trong MySQL

Cách lấy bản ghi có giá trị tối đa bằng truy vấn con SQL

Đây là truy vấn SQL để nhận các hàng có giảm giá tối đa giá trị bằng cách sử dụng truy vấn con 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 |
+------------+------+--------+

Trong truy vấn trên, trước tiên, chúng tôi chọn giá trị tối đa cho bảng trong truy vấn con (bằng in đậm ). Sau đó, chúng tôi chọn các hàng đó từ bảng bán hàng ban đầu trong đó giá trị cột bán hàng là giá trị tối đa. Đối với các bảng lớn, bạn có thể cải thiện hiệu suất truy vấn bằng cách lập chỉ mục giảm giá cột.

Nếu bạn muốn lọc dữ liệu theo các điều kiện cụ thể, hãy thêm mệnh đề WHERE trong truy vấn con của bạn như được hiển thị bên dưới.

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

Phần thưởng Đọc:Cách cập nhật Chế độ xem trong MySQL

Cách lấy bản ghi có giá trị tối đa cho mỗi NHÓM

Dưới đây là các bước để nhận hàng có giá trị tối đa bằng cách sử dụng GROUP BY trong MySQL.

Giả sử bạn có bảng product_sales (product, order_date, sale) chứa dữ liệu bán hàng cho nhiều sản phẩm. Và bạn muốn nhận được các bản ghi với giá trị bán hàng tối đa cho mỗi sản phẩm.

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

Phần thưởng đã đọc:Cách đạt được Tổng số người dùng tích lũy mỗi ngày trong MySQL

Đây là truy vấn SQL để nhận bản ghi có giá trị tối đa bằng cách sử dụng GROUP BY, cho mỗi nhóm, tức là mỗi sản phẩm.

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

Trong truy vấn trên, trước tiên, chúng tôi tính toán giá trị bán hàng tối đa cho mỗi sản phẩm bằng cách sử dụng truy vấn con lồng nhau (bằng in đậm ), rồi kết hợp kết quả với product_sales ban đầu bảng dựa trên các cột sản phẩm và bán hàng.

Hy vọng rằng bạn có thể nhận được các hàng có giá trị cột tối đa cho bảng của mình.

Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm kiếm mysql trong PHP nhiều bảng bằng cách sử dụng một từ khóa

  2. Cách đếm các mục trong danh sách MySQL được phân tách bằng dấu phẩy

  3. Cài đặt MySQL Workbench để quản trị cơ sở dữ liệu

  4. mã hóa một danh sách để sử dụng trong mệnh đề python MySQLDB IN

  5. Hàm mật khẩu MySQL