Ý nghĩa của mệnh đề OVER trong Oracle là gì?Điều khoản OVER trong Oracle
Trả lời
Mệnh đề OVER chỉ định phân vùng, đặt hàng & cửa sổ "trên đó" chức năng phân tích hoạt động.
Ví dụ, điều này tính toán trung bình:
AVG(amt) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
date amt avg_amt
===== ==== =======
1-Jan 10.0 10.5
2-Jan 11.0 17.0
3-Jan 30.0 17.0
4-Jan 10.0 18.0
5-Jan 14.0 12.0
Nó hoạt động trên một cửa sổ di chuyển (3 hàng rộng) qua các hàng, sắp xếp theo ngày.
này tính toán số dư hoạt động:
SUM(amt) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
date amt sum_amt
===== ==== =======
1-Jan 10.0 10.0
2-Jan 11.0 21.0
3-Jan 30.0 51.0
4-Jan 10.0 61.0
5-Jan 14.0 75.0
Nó hoạt động trên một cửa sổ bao gồm hàng hiện tại và tất cả các hàng trước.
này tính toán tối đa, riêng cho từng "nợ":
MAX(amt) OVER (PARTITION BY dept)
dept amt max_amt
==== ==== =======
ACCT 5.0 7.0
ACCT 7.0 7.0
ACCT 6.0 7.0
MRKT 10.0 11.0
MRKT 11.0 11.0
SLES 2.0 2.0
Nó hoạt động trên một cửa sổ bao gồm tất cả các hàng cho một nợ cụ thể.
SQL Fiddle: http://sqlfiddle.com/#!4/9eecb7d/122
Đó là một phần của Oracle analytic functions.
Bạn có thể sử dụng nó để chuyển đổi một số chức năng tổng hợp thành tích:
SELECT MAX(date)
FROM mytable
sẽ trở lại 1
hàng với tối đa duy nhất,
SELECT MAX(date) OVER (ORDER BY id)
FROM mytable
sẽ trả lại toàn bộ hàng với mức tối đa chạy.
Bạn làm rất tốt điểm về việc chuyển đổi các hàm tổng hợp thành các hàm phân tích. Đó là một cách tôi chưa bao giờ nghĩ về nó. – user128216
Nếu nghi ngờ, đọc hướng dẫn: http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm#SQLRF06174 –