DENSE_RANK ORDER BY NULL始终返回1



我在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

因此,饮用总是等于1。这也适用于:

DENSE_RANK((OVER(ORDER BY null(AS drink

DENSE_RANK((OVER(由命令分隔为空(作为饮用

DENSE_RANK((OVER(由1个订单分隔为null(AS drink

DENSE_RANK((OVER(PARTITION BY null ORDER BY null(AS drink

当存在ORDER BY null子句时,是否存在drink不等于1的情况?

编辑:我知道dense_rank从1开始。问题是关于大于1的值。

文档中写道:

使用order_by_clause指定数据在分区中的排序方式。对于所有分析函数,您可以在多个键上对分区中的值进行排序,每个键由value_expr定义,每个键都由排序序列限定。

在每个函数中,可以指定多个排序表达式。当使用对值进行排序的函数时,这样做尤其有用,因为第二个表达式可以解析第一个表达式的相同值之间的关系。

每当order_by_clause导致多行的值相同时,函数的行为如下:

  • CUME_DISTDENSE_RANKNTILEPERCENT_RANKRANK为每一行返回相同的结果

当您order by null时,order_by_clause会为多个所有行(在分区中(产生相同的值,因此它们都会得到相同的结果。

dense_rank的文档还说:

列是以1开头的连续整数。

所以他们得到了相同的结果,必须是1。

相关内容

  • 没有找到相关文章

最新更新