在Amazon Redshift中实现NULLS FIRST

时间:2014-03-10 09:05:22

标签: 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;

问题是如果field_c是空值,它会出现在最后。我想在开头,所以null值被视为小于所有其他值。在Oracle中,这可以通过提供NULLS FIRST参数来完成,但在Redshift中不支持。那么如何在Redshift中实现它呢?

2 个答案:

答案 0 :(得分:4)

  

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

使用表达式

field_c IS NOT NULL

作为第一个ORDER BY项目。它评估为......
FALSE ..如果为NULL
TRUE ..如果不是NULL。

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;

答案 1 :(得分:1)

如果field_c是字符串

order by coalesce(field_c, '')

如果是数字

order by coalesce(field_c, 0)

将零替换为可能的最低值