栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Oracle Analytic函数可实现分组中的最小值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Oracle Analytic函数可实现分组中的最小值

我认为Rank()函数不是解决这个问题的方法,这有两个原因。

首先,它可能不如基于Min()的方法有效。

原因是查询在扫描数据时必须维护每个部门所有薪水的有序列表,然后稍后将通过重新读取此列表来分配等级。显然,在没有可用于此目的的索引的情况下,在读取完最后一个数据项之前,您无法分配等级,并且维护列表的成本很高。

因此,Rank()函数的性能取决于要扫描的元素总数,如果数量足以使排序溢出到磁盘,则性能将下降。

这可能更有效:

select dept,       emp,       salaryfrom       (       SELECt dept,    emp,   salary,   Min(salary) Over (Partition By dept) min_salary       FROM   mytable       )where salary = min_salary/

此方法仅要求查询在每个部门中维护到目前为止所遇到的最小值的单个值。如果遇到新的最小值,则将修改现有值,否则将丢弃新值。必须保留在内存中的元素总数与部门数有关,而不与扫描的行数有关。

可能是甲骨文拥有一条代码路径来识别在这种情况下并不需要真正计算排名,但是我不会打赌。

不喜欢Rank()的第二个原因是它只是回答了错误的问题。问题不是“哪个记录的薪水是每个部门的薪水递增时的第一位”,而是“哪个记录的薪水是每个部门的最低薪水”。至少对我来说,那有很大的不同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/670412.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号