第一个/最后一个vs最小/最大ORACLE。SQL
以下是查询和查询结果:第一个/最后一个vs最小/最大ORACLE。SQL,sql,oracle,Sql,Oracle,以下是查询和查询结果: 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 emp ORDER B
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 emp
ORDER BY deptno, sal;
EMPNO DEPTNO SAL Lowest Highest
---------- ---------- ---------- ---------- ----------
7934 10 1300 1300 5000
7782 10 2450 1300 5000
7839 10 5000 1300 5000
7369 20 800 800 3000
7876 20 1100 800 3000
7566 20 2975 800 3000
7788 20 3000 800 3000
7902 20 3000 800 3000
7900 30 950 950 2850
7654 30 1250 950 2850
7521 30 1250 950 2850
7844 30 1500 950 2850
7499 30 1600 950 2850
7698 30 2850 950 2850
SQL>
它是否会返回相同的结果,而不返回KEEP语句?为什么
另外,我本来会亲自检查,但在当前机器上没有数据库访问权限。根据您的标记,我假设您在Oracle中:
MIN(sal)KEEP(densite_RANK FIRST ORDER BY sal)
的意思是“按sal对行进行排序,只选择sal值最小的行。如果有更多行具有相同的sal,则开始时的MIN函数会告诉Oracle选择sal值最小的行。”
在这种情况下,由于
densite\u中的顺序排在第一位
和MIN()
具有相同的列,因此我建议不要在此处使用KEEP
,因为性能问题。基于您的标记,我假设您在Oracle中:
MIN(sal)KEEP(densite_RANK FIRST ORDER BY sal)
的意思是“按sal对行进行排序,只选择sal值最小的行。如果有更多行具有相同的sal,则开始时的MIN函数会告诉Oracle选择sal值最小的行。”
在这种情况下,由于densite\u中的顺序排在第一位
和MIN()
具有相同的列,因此我建议不要在性能问题上使用KEEP
KEEP关键字是为了语义清晰。它符合条件
聚合函数,表示只有
将返回聚合函数
甲骨文
KEEP关键字是为了语义清晰。它符合条件
聚合函数,表示只有
将返回聚合函数
你可以自己测试一下。不是我不想回答,而是你似乎不知道这个工具。不过似乎对我不起作用:/你可以自己测试一下。不是我不想回答,而是你似乎不知道这个工具。但似乎对我不起作用:/谢谢Alejandro。这是我的猜测,但现在我确定了,谢谢亚历杭德罗。这是我的猜测,但现在我肯定知道xx了
EMPNO | DEPTNO | SAL | LOWEST | HIGHEST
7934 | 10 | 1300 | 1300 | 5000
7782 | 10 | 2450 | 1300 | 5000
7839 | 10 | 5000 | 1300 | 5000
7369 | 20 | 800 | 800 | 3000
7876 | 20 | 1100 | 800 | 3000
7566 | 20 | 2975 | 800 | 3000
7788 | 20 | 3000 | 800 | 3000
7902 | 20 | 3000 | 800 | 3000
7900 | 30 | 950 | 950 | 2850
7654 | 30 | 1250 | 950 | 2850
7521 | 30 | 1250 | 950 | 2850
7844 | 30 | 1500 | 950 | 2850
7499 | 30 | 1600 | 950 | 2850
7698 | 30 | 2850 | 950 | 2850
EMPNO | DEPTNO | SAL | LOWEST | HIGHEST
7934 | 10 | 1300 | 1300 | 5000
7782 | 10 | 2450 | 1300 | 5000
7839 | 10 | 5000 | 1300 | 5000
7369 | 20 | 800 | 800 | 3000
7876 | 20 | 1100 | 800 | 3000
7566 | 20 | 2975 | 800 | 3000
7788 | 20 | 3000 | 800 | 3000
7902 | 20 | 3000 | 800 | 3000
7900 | 30 | 950 | 950 | 2850
7654 | 30 | 1250 | 950 | 2850
7521 | 30 | 1250 | 950 | 2850
7844 | 30 | 1500 | 950 | 2850
7499 | 30 | 1600 | 950 | 2850
7698 | 30 | 2850 | 950 | 2850