PostgreSQL では、ORDER BY 句でエイリアスを使用するのが難しい場合があります。次のクエリについて考えてみましょう:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY global_stock = 0, title;
PostgreSQL 8.1.23 でこのクエリを実行すると、「エラー: 列 "global_stock" が存在しません」というエラーが発生します。これを解決するには、主に 2 つのアプローチがあります。
最初のアプローチは、エイリアスの代わりに列番号で順序付けすることです。この場合、クエリは次のようになります。
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY 2, 1;
ここで、「2」は 2 番目の列、つまりエイリアス「global_stock」を指します。
別のアプローチは、元のクエリをサブクエリでラップし、サブクエリ内のエイリアスで順序付けすることです。クエリは次のようになります:
SELECT * FROM ( SELECT title, (stock_one + stock_two) AS global_stock FROM product ) AS x ORDER BY (CASE WHEN global_stock = 0 THEN 1 ELSE 0 END) DESC, title;
この場合、エイリアス「global_stock」がサブクエリ内で使用され、ORDER BY 句がサブクエリの結果セットに適用されます。
以上がPostgreSQL の ORDER BY 句でエイリアスを適切に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。