2010年11月26日星期五

ORACLE里面的统计行数

ORACLE里面有很多统计用的函数,比如COUNT, SUM, MAX, LAST_VALUE, FIRST_VALUE。
乍一看可能觉得很好理解,没什么复杂的。
但是如果一个窗口的概念不弄明白的话,你会觉得很复杂,很难用,然后怀疑这些个函数都不好用了。

比方说你想一张薪水的历史记录表,
salary_history
emp_id,
salary,
update_date

你想找出每个人最新的薪水的值
select last_value(salary) over (partition by emp_id order by update_date rows between unbounded preceding and unbounded following) from salary_history;

其中 rows between unbounded preceding and unbounded following 就是指定了窗口:所有的数据。
如果不指定的话,默认的窗口是 range between unbounded preceding and current row,也就是当前记录为止的所有记录。

这个默认窗口只是对有order by的数据才有效, 而max, count函数如果不指定order by, 那么他的对象就是所有的数据。这点在ORACLE的文档里并没有提及的。

没有评论: