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

Hàm tổng hợp để nhận được sự khác biệt hoặc tỷ lệ của hai hàng theo thứ tự

there are only two rows per price , điều này có thể nhiều đơn giản hơn và nhanh hơn:

SELECT n.item, n.price - o.price AS diff, n.price / o.price AS ratio
FROM   price n                 -- "new"
JOIN   price o USING (item)    -- "old"
WHERE  n.day > o.day;

-> SQLfiddle

Biểu mẫu này mang lại lợi ích bổ sung, đó là bạn có thể sử dụng trực tiếp tất cả các cột từ cả hai hàng.

Đối với các tình huống phức tạp hơn (không cần thiết cho việc này), bạn có thể sử dụng các chức năng cửa sổ như đã được chỉ ra. Đây là một cách tiếp cận đơn giản hơn những gì đã được đề xuất:

SELECT DISTINCT ON (item)
       item
      ,price - lead(price) OVER (PARTITION BY item ORDER BY day DESC) AS diff
FROM   price
ORDER  BY item, day DESC;

Ở đây chỉ cần một chức năng cửa sổ. Và một cấp truy vấn, vì DISTINCT ON được áp dụng sau các chức năng cửa sổ. Thứ tự sắp xếp trong cửa sổ phù hợp với thứ tự sắp xếp tổng thể, giúp tăng hiệu suất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết hợp hai truy vấn riêng biệt trong một truy vấn postgresql ... ... (có thể hoặc không thể)

  2. Lỗi pgAdmin - quan hệ [tên của chức năng / Lượt xem / Chức năng kích hoạt] không tồn tại

  3. Một hệ thống bảo mật cho ứng dụng, tổng hợp kết nối và PostgreSQL - Trường hợp cho LDAP

  4. Truy xuất các từ khóa phổ biến nhất từ ​​cột tsvector

  5. Lỗi postgres khi cập nhật dữ liệu cột