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' が存在しません。」というエラーが発生します。このエラーは、エイリアスが ORDER BY 句で認識されないために発生します。
考えられる解決策は 2 つあります。
1。数値順序:
エイリアスを使用する代わりに、SELECT 句内の位置によって列を参照できます。上の例では、'global_stock' エイリアスは列 2 に対応します。したがって、変更されたクエリは次のようになります:
SELECT title, (stock_one + stock_two) AS global_stock FROM product ORDER BY 2, 1;
2。 CASE 式を使用したサブクエリ:
もう 1 つのオプションは、サブクエリと CASE 式を使用することです:
SELECT * FROM ( SELECT title, (stock_one + stock_two) AS global_stock FROM product ) x ORDER BY (CASE WHEN global_stock = 0 THEN 1 ELSE 0 END) DESC, title;
この場合、CASE 式は次の行に値 1 を割り当てます。 'global_stock' = 0、その他すべては 0。次に、クエリはこの値に基づいて結果を降順に並べ替え、使用可能なアイテムに効果的に優先順位を付けます。
以上が「列が存在しません」エラーを発生させずに PostgreSQL ORDER BY 句でエイリアスを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。