在Amazon Redshift中首先实现NULLS

Roh*_*han 0 sql postgresql null sql-order-by amazon-redshift

我对行号使用求和窗口函数,类似于此查询-

SELECT field_a,
       SUM(1) OVER (PARTITION BY field_b ORDER BY field_c ASC ROWS UNBOUNDED PRECEDING) AS row_number
FROM test_table
    ORDER BY row_number;
Run Code Online (Sandbox Code Playgroud)

问题在于,如果field_c为空值,它将显示在末尾。我在一开始就想要它,因此将null值视为小于所有其他值。在Oracle中,可以通过提供NULLS FIRST参数来实现,但是Redshift不支持该参数。那么如何在Redshift中实现它呢?

Erw*_*ter 5

我在一开始就希望它为[null],因此将null值视为小于所有其他值。

使用表达式

field_c IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

作为第一ORDER BY项。
FALSE如果为NULL
TRUE ,则评估为..... 如果为非。

并且FALSE(0)在TRUE(1)之前排序。适用于任何数据类型和任何可能的值分布。

SELECT field_a,
       row_number() OVER (PARTITION BY field_b
                          ORDER BY field_c IS NOT NULL, field_c) AS row_number
FROM   test_table
ORDER  BY row_number;
Run Code Online (Sandbox Code Playgroud)