oracle分析函数over partition by 和group by的区别

如题所述

普通的聚合函数用group by分组,每个分组返回一个统计值,而分析函数采用partition by分组,并且每组每行都可以返回一个统计值。

分析函数的形式:分析函数带有一个开窗函数over(),包含三个分析子句:分组(partition by), 排序(order by), 窗口(rows) 。

使用形式如下:over(partition by xxx order by yyy rows between zzz)。

案例:

案例1:显示各部门员工的工资,并附带显示该部门的最高工资。
SELECT E.Department_Id,
       E.Employee_Id,
       E.Last_Name,
       E.Salary,
       LAST_VALUE(E.Salary) OVER(PARTITION BY E.Department_Id ORDER BY E.Salary ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) MAX_SAL
  FROM employees E;
--unbounded preceding and unbouned following针对当前所有记录的前一条、后一条记录,也就是按Department_Id分组之后的,所有该小组的记录
--unbounded:不受控制的,无限的
--preceding:在...之前,
--following:在...之后

温馨提示:答案为网友推荐,仅供参考
相似回答