我对行号使用和窗口函数,类似于此查询 -
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中实现它呢?
答案 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)
将零替换为可能的最低值