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

Cách so sánh hai hàng từ cùng một bảng

Đôi khi bạn có thể cần so sánh các hàng liên tiếp hoặc so sánh từng hàng với hàng trước đó trong bảng MySQL. Trong bài viết này, chúng ta sẽ xem xét cách so sánh hai hàng từ cùng một bảng bằng cách sử dụng tự nối. Bạn có thể sử dụng nó để so sánh các hàng liên tiếp hoặc nhận được sự khác biệt giữa hai hàng.


Cách so sánh các hàng liên tiếp trong MySQL

Giả sử bạn có bảng sau doanh số bán hàng (id, order_date, amount) và cột số tiền chứa tổng dữ liệu bán hàng tích lũy.

 mysql> tạo bảng bán hàng (khóa chính id int auto_increment, ngày order_date, số lượng int); mysql> chèn vào giá trị bán hàng (order_date, amount) ('2020-10-01', 100), ('2020-10 -02 ', 125), (' 2020-10-03 ', 140), (' 2020-10-04 ', 160); mysql> select * from sales; + ------ + ---- -------- + -------- + | id | order_date | số tiền | + ------ + ------------ + -------- + | 1 | 2020-10-01 | 100 || 2 | 2020-10-02 | 125 || 3 | 2020-10-03 | 140 || 4 | 2020-10-04 | 160 | + ------ + ------------ + -------- + 

Phần thưởng đọc:Cách so sánh hai cột trong MySQL

Trong ví dụ của chúng tôi, nếu bạn muốn tìm hiểu doanh số bán hàng được thực hiện vào mỗi ngày thì bạn cần phải so sánh giá trị số tiền của mỗi hàng với giá trị của hàng trước đó. Đây là truy vấn SQL để so sánh từng hàng với hàng trước đó.

 mysql> CHỌN g1.id, g1.order_date, g1.amount, (g2.amount - g1.amount) AS daily_amount TỪ bán hàng g1 INNER THAM GIA bán hàng g2 TRÊN g2.id =g1.id + 1; + - ---- + ------------ + -------- + -------------- + | id | order_date | số tiền | daily_amount | + ------ + ------------ + -------- + -------------- + | 1 | 2020-10-01 | 100 | 25 || 2 | 2020-10-02 | 125 | 15 || 3 | 2020-10-03 | 140 | 20 | + ------ + ------------ + -------- + -------------- +  

Trong truy vấn trên, chúng tôi kết hợp bảng bán hàng với chính nó bằng cách sử dụng điều kiện INNER JOIN g2.id =g1.id + 1 cho phép bạn so sánh từng hàng với hàng trước của nó.

Phần thưởng đã đọc:Cách nhận mọi hàng thứ N trong MySQL

Xin lưu ý, điều kiện này phụ thuộc vào thực tế là cột id của chúng ta có các số liên tiếp. Hầu hết các bảng đều có cột khóa chính tự động tăng dần, vì vậy nó sẽ hoạt động trong hầu hết các trường hợp. Nếu chúng khác nhau bởi một số hằng số khác, bạn có thể sửa đổi điều kiện INNER JOIN cho phù hợp.

Hy vọng rằng bây giờ bạn có thể dễ dàng so sánh hai hàng trong cùng một bảng trong MySQL.

Ubiq giúp dễ dàng trực quan hóa dữ liệu và theo dõi chúng trong trang tổng quan thời gian thực. Dùng thử Ubiq miễn phí.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 7 công việc hàng đầu yêu cầu SQL

  2. Duy trì MAX (hoặc MIN) đang chạy được nhóm lại

  3. Hiểu sự kiện mất mát với sự kiện mở rộng

  4. Dỡ bỏ cơ sở dữ liệu rất lớn

  5. Các nguyên tắc cơ bản về biểu thức bảng, Phần 8 - CTE, tiếp tục xem xét tối ưu hóa