小编典典

Oracle“分区依据”关键字

all

有人可以解释一下partition by关键字的作用并给出一个简单的例子,以及为什么要使用它?我有一个由其他人编写的 SQL
查询,我正试图弄清楚它的作用。

分区示例:

SELECT empno, deptno, COUNT(*) 
OVER (PARTITION BY deptno) DEPT_COUNT
FROM emp

我在网上看到的例子似乎有点太深入了。


阅读 120

收藏
2022-05-05

共1个答案

小编典典

PARTITION BY子句设置将用于OVER子句中每个“GROUP”的记录范围。

在您的示例 SQL
中,DEPT_COUNT将为每个员工记录返回该部门内的员工人数。(就好像您正在对emp表进行去规范化;您仍然返回emp表中的每条记录。)

emp_no  dept_no  DEPT_COUNT
1       10       3
2       10       3
3       10       3 <- three because there are three "dept_no = 10" records
4       20       2
5       20       2 <- two because there are two "dept_no = 20" records

如果有另一列(例如,state),那么您可以计算该州有多少个部门。

这就像在不聚合结果集(即删除匹配记录)的情况下获取GROUP BY( SUM,AVG等) 的结果。

例如,当您使用LAST OVERorMIN OVER函数获取部门中的最低和最高薪水,然后在 没有
子选择的情况下对此记录薪水进行计算时,它很有用,这要快得多。

阅读链接的AskTom
文章
了解更多详细信息。

2022-05-05