我在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_DIST
、DENSE_RANK
、NTILE
、PERCENT_RANK
和RANK
为每一行返回相同的结果
当您order by null
时,order_by_clause
会为多个所有行(在分区中(产生相同的值,因此它们都会得到相同的结果。
dense_rank
的文档还说:
列是以1开头的连续整数。
所以他们得到了相同的结果,必须是1。