首页 > 数据库 > mysql教程 > Oracle 聚合函数中的'KEEP”子句如何影响'PARTITION BY”?

Oracle 聚合函数中的'KEEP”子句如何影响'PARTITION BY”?

Linda Hamilton
发布: 2024-12-29 21:06:21
原创
382 人浏览过

How Does the `KEEP` Clause Affect `PARTITION BY` in Oracle Aggregate Functions?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板