什么叫分析函數(Analytic function)?
Oracle從8.1.6開始提供分析函數,分析函數用于計算基于組的某種聚合值,它和聚合函數的不同之處是
對于每個組返回多行,而聚合函數對于每個組只返回一行。
基本語法
function_name(arg1,arg2,...) OVER (<partition-clause> <order-by-clause > <window clause>)
另外,還需要提到的一點是,在有分析函數參與的SQL語句中,執行流程依次是:
1) JOIN, WHERE, GROUP BY, HAVING
2) 創建分區(通常通過PARTITION BY),而后分析函數將作用于分區中的每一行
3) 主語句中ORDER BY(這個我們以前就知道,主語句的ORDER BY總是最后執行)。
示例
計算第4峰值
-- 第四峰值
select * from (select rank() over(partition by year,city,site order by o3 desc) rk, year,city,site,tj_date,o3,o3_8h from o3 where o3 is not null) t
where t.rk=4;
計算平均票房
SELECT title,corp,year,box_office,
ROUND(AVG(box_office) OVER (PARTITION BY corp)) af
FROM film;
引用
ORACLE HANDBOOK系列之一:Oracle分析函數(Analytic Function)