我在 PROD 过程代码中找到如下:
select *
from (select "EMPNO",
"SAL",
"COMM",
"DEPTNO",
DENSE_RANK() OVER (PARTITION BY deptno ORDER BY null) AS drank
from SCOTT."EMP"
where deptno in (10,30))
where drank = 1
order by deptno
结果:
EMPNO SAL COMM DEPTNO DRANK
7934 1300 - 10 1
7839 5000 - 10 1
7782 2450 - 10 1
7844 1500 0 30 1
7900 950 - 30 1
7654 1250 1400 30 1
7499 1600 300 30 1
7698 2850 - 30 1
7521 1250 500 30 1
结果drank总是等于1。这也适用于:
DENSE_RANK() OVER (ORDER BY null) 喝了
DENSE_RANK() OVER (PARTITION BY comm ORDER BY null) 喝了
DENSE_RANK() OVER (PARTITION BY 1 ORDER BY null) 喝了
DENSE_RANK() OVER (PARTITION BY null ORDER BY null) 喝了
有没有当任何情况下,喝了不等于1时,有ORDER BY无效条款?
编辑:我知道dense_rank从1 开始。问题是关于大于1 的值。
文档说:
使用
order_by_clause
来指定分区内数据的排序方式。对于所有分析函数,您可以对多个键的分区中的值进行排序,每个键都由 a 定义,每个键value_expr
都由一个排序序列限定。在每个函数中,您可以指定多个排序表达式。这样做在使用对值进行排名的函数时特别有用,因为第二个表达式可以解决第一个表达式的相同值之间的关系。
每当
order_by_clause
多行产生相同的值时,该函数的行为如下:
CUME_DIST
,DENSE_RANK
,NTILE
,PERCENT_RANK
, 并RANK
为每一行返回相同的结果。- ...
当你order by null
,order_by_clause
结果在 多个 所有行(在分区中)的值相同 ,所以它们都得到相同的结果。
的文档dense_rank
还说:
秩是从 1 开始的连续整数。
所以他们得到相同的结果,必须是 1。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句