DENSE_RANK ORDER BY NULL 总是返回 1

Morticia A. 亚当斯

我在 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 nullorder_by_clause结果在 多个 所有行(在分区中)的值相同 ,所以它们都得到相同的结果。

文档dense_rank还说:

秩是从 1 开始的连续整数。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章