有人可以解释一下partition by关键字的作用并给出一个简单的例子,以及为什么要使用它?我有一个由其他人编写的 SQL 查询,我正试图弄清楚它的作用。
partition by
分区示例:
SELECT empno, deptno, COUNT(*) OVER (PARTITION BY deptno) DEPT_COUNT FROM emp
我在网上看到的例子似乎有点太深入了。
该PARTITION BY子句设置将用于OVER子句中每个“GROUP”的记录范围。
PARTITION BY
OVER
在您的示例 SQL 中,DEPT_COUNT将为每个员工记录返回该部门内的员工人数。(就好像您正在对emp表进行去规范化;您仍然返回emp表中的每条记录。)
DEPT_COUNT
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),那么您可以计算该州有多少个部门。
state
这就像在不聚合结果集(即删除匹配记录)的情况下获取GROUP BY( SUM,AVG等) 的结果。
GROUP BY
SUM
AVG
例如,当您使用LAST OVERorMIN OVER函数获取部门中的最低和最高薪水,然后在 没有 子选择的情况下对此记录薪水进行计算时,它很有用,这要快得多。
LAST OVER
MIN OVER
阅读链接的AskTom 文章了解更多详细信息。