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

So sánh các hàng trong cùng một bảng trong mysql

Bạn có thể thực hiện "tự tham gia" (tham gia bảng với chính nó) để thực hiện các truy vấn. Phần khó ở đây là biết thứ tự các hàng đã được chèn vào bảng và chỉ so sánh các hàng liền kề theo thứ tự (tạm thời). Tôi giả sử bạn có một số loại cột TIMESTAMP sẽ cho bạn biết những thay đổi về giá nào xảy ra sau những thay đổi trước đó. Nếu không, thì có lẽ "ID" có thể thông báo cho bạn về điều đó (hàng ID lớn hơn được chèn sau ID nhỏ hơn).

Gọi bảng của bạn là 'TAB', sử dụng 'TRADER' để cung cấp liên kết và sử dụng 'ID' để cung cấp Đơn đặt hàng, truy vấn sẽ yêu cầu tự tham gia ba chiều như sau:

SELECT a.trader
     , SUM(IF(a.price > b.price, 1, 0)) nbr_incr
     , SUM(IF(a.price < b.price, 1, 0)) nbr_decr
     , SUM(IF(a.price = b.price, 1, 0)) nbr_same
  FROM tab a
  JOIN tab b 
    ON a.trader = b.trader AND a.id > b.id
  LEFT OUTER JOIN tab c 
    ON a.trader = c.trader AND a.id > c.id AND b.id < c.id
 WHERE c.id IS NULL
 GROUP BY a.trader

Truy vấn trên kết hợp bảng với chính nó hai lần để mỗi tab đại diện cho những điều sau:

  • tab a:Hàng gần đây hơn để so sánh
  • tab b:Hàng ngay trước đó để so sánh với
  • tab c:Một hàng giữa a &b theo chiều kim thời gian (không nên tồn tại)

Chúng tôi thực hiện THAM GIA TRÁI OUTER tới 'tab c' bởi vì chúng tôi thực sự không muốn hàng đó tồn tại. Trong mệnh đề where, chúng tôi chỉ lọc các kết quả của mình cho các kết quả không tồn tại hàng 'tab c'.

Cuối cùng, truy vấn thực hiện 'GROUP BY' đối với nhà giao dịch và SUM () là Tăng và Giảm bằng cách so sánh giá từ các hàng 'a' và 'b'.

Đây là một thử thách thú vị. Hy vọng điều này sẽ hữu ích!

john ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tìm ra cách chạy mysqli_multi_query và sử dụng kết quả từ truy vấn cuối cùng

  2. Di chuyển cơ sở dữ liệu MySQL sang một máy chủ mới

  3. Không thể trả về kết quả từ thủ tục được lưu trữ bằng con trỏ Python

  4. Bản sao liên quan đến SUM, LEFT JOIN và GROUP BY

  5. Cơ sở dữ liệu MySQL có thể lớn đến mức nào trước khi hiệu suất bắt đầu giảm