相关疑难解决方法(0)

在Oracle中有和没有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
Run Code Online (Sandbox Code Playgroud)

第一个版本更合乎逻辑,但第二个版本可能是某种特殊情况,也许是一些性能优化.

sql oracle

15
推荐指数
2
解决办法
3万
查看次数

根据按另一列分组的不同列的最大值获取值

我想根据另一列分组的不同列的最大值来获取列的值.

我有这张桌子:

KEY NUM VAL
A   1   AB
B   1   CD
B   2   EF
C   2   GH
C   3   HI
D   1   JK
D   3   LM
Run Code Online (Sandbox Code Playgroud)

并希望这个结果:

KEY VAL
A   AB
B   EF
C   HI
D   LM
Run Code Online (Sandbox Code Playgroud)

我实际上可以使用此查询来获取它.

select KEY, VAL
from TABLE_NAME TN
where NUM = (
    select max(NUM)
    from TABLE_NAME TMP
    where TMP.KEY = TN.KEY
    )
Run Code Online (Sandbox Code Playgroud)

但是在ORACLE SQL(10g或更高版本)中有更优雅的方式来获得结果吗?

它背后的原因是实际上有多个KEYs,它看起来有点难看.

sql oracle

6
推荐指数
1
解决办法
4263
查看次数

标签 统计

oracle ×2

sql ×2