RedshiftでのROW_NUMBER()関数のNULL挙動について
仕事していてRedshiftでのROW_NUMBER()関数のNULL挙動ってどうなんだっけと思ったので、メモしておく。
ORDER BYした時のソートでNULLがどうなるかって話。
docs.aws.amazon.com
テストデータについて
ROW_NUMBER()関数のテストとして、PARTITION BYの値はすべて同じ。
ORDER BYにNULLと値が混ざっている状態にした。
select * from schema.test_rownum;
結果
昇順ソート
select column1, column2, column3, ROW_NUMBER() OVER ( PARTITION BY column1 ORDER BY column3 ASC ) AS row_num from schema.test_rownum;
結果
NULLが値よりも上位でソートされるので、row_numberはnullが1となる。
降順ソート
select column1, column2, column3, ROW_NUMBER() OVER ( PARTITION BY column1 ORDER BY column3 DESC ) AS row_num from schema.test_rownum;
結果
値がNULLよりも上位でソートされるので、row_numberは値が1 となる。
こういう細かいところPostgreSQLやOracle DBで若干違ったりするから地味だけどちゃんと確認しないとなー。