ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PostgreSQL:2列を同一列としてソートする方法

CASE式でソートカラムを用意してソートしました。
f:id:AJYA:20140630052916j:plain

PostgreSQL上に作成されたデータベースのテーブルに、column1とcolumn2があります。
column1はNULLの場合もありますが、column2はNULL以外の値が必ず入っています。
column1とcolumn2を同一列とみなし、NULLはソートに使わないようにしてソートしなければならなくなりました。

実現方法

方法を考えたところ、以下のSQLで実現できました。

SELECT * ,
    CASE 
        WHEN column1 IS NULL THEN column2 
        ELSE column1 
    END AS sortcolumn
FROM users ORDER BY sortcolumn ASC

CASE式でcolumn1がNULLかどうか判定して、NULLであればcolumn2の値を使い、NULLでなければcolumn1の値を使っています。