oracle分析函数over partition by 和group by的区别
1个回答
展开全部
普通的聚合函数用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:在...之后
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询