我遇到了两个似乎有相同结果的查询:在分区上应用聚合函数.
我想知道这两个查询之间是否有任何区别:
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)
第一个版本更合乎逻辑,但第二个版本可能是某种特殊情况,也许是一些性能优化.
我想根据另一列分组的不同列的最大值来获取列的值.
我有这张桌子:
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,它看起来有点难看.