Oracle 中带和不带 KEEP 的 PARTITION BY
Oracle 中的 PARTITION BY 子句允许您对表中的行进行分组并执行聚合函数关于这些群体。 KEEP 子句与 PARTITION BY 子句一起使用时,允许您指定在计算聚合函数时要保留哪些行。
考虑以下两个查询:
SELECT empno, deptno, sal, MIN(sal) OVER (PARTITION BY deptno) "Lowest", MAX(sal) OVER (PARTITION BY deptno) "Highest" FROM empl SELECT empno, deptno, sal, MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) "Lowest", MAX(sal) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) "Highest" FROM empl
这两个查询似乎为了得到相同的结果:他们计算每个部门的最低和最高工资。但是,这两个查询之间存在细微差别。
在第一个查询中,MIN 和 MAX 函数应用于每个分区中的所有行。在第二个查询中,KEEP 子句用于指定计算中仅包含每个分区中的第一行和最后一行。
KEEP 子句可以与任何聚合函数一起使用。当您想要查找一组行中某个值的第一次或最后一次出现时,它特别有用。
例如,以下查询查找每个部门中薪水最高的员工的名字和姓氏:
SELECT empno, deptno, sal, MIN(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS "First Highest Salary", MAX(name) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) AS "Last Highest Salary" FROM empl GROUP BY deptno
KEEP 子句也可用于优化性能。通过指定仅应将每个分区中的第一行或最后一行包含在计算中,可以减少数据库需要处理的数据量。这可以提高查询的性能,特别是在您使用大型数据集时。
以上是Oracle 聚合函数中的'KEEP”子句如何影响'PARTITION BY”?的详细内容。更多信息请关注PHP中文网其他相关文章!