次のような PostgreSQL の SQL エラーがあります。
SELECT DISTINCT, ORDER BY expressions must appear in select list
これは SELECT DISTINCT を使用している場合に、 ORDER BY 句に含まれている項目が SELECT 句にない場合に発生します。
例えば、次のような SQL です。
SELECT DISTINCT field_1 , field_2 FROM test_table ORDER BY field_3
SELECT DISTINCT されているのは field_1 と field_2 ですが ソートは field_3 を指定しています。
これでは結果の並び順を保証することができないため エラーが発生するわけです。
ちなみに Oracle の場合は、次のようなエラーになります。
ORA-01791: SELECT式が無効です
ただ、Oracle は さらに賢いようで、次のような場合はエラーになりません。 ( PostgreSQL はエラーになります)
SELECT DISTINCT field_1 , field_2 FROM test_table WHERE field_3 = '0' ORDER BY field_3
この場合は、field_3 が 1つに固定されるため、 "ソート指定なし" と同じ状態になるためエラーになりません。