11

私は次のクエリを持っています:

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    global_stock = 0,
    title;

PostgreSQL 8.1.23で実行すると、次のエラーが発生します。

クエリに失敗しました:エラー:列"global_stock"が存在しません

誰かが私がそれを機能させるのを手伝ってくれる?最初に利用可能なアイテムが必要ですが、その後に利用できないアイテムが必要です。どうもありがとう!

4

3 に答える 3

20

あなたはいつでもORDER BYこのようにすることができます:

select 
    title, 
    ( stock_one + stock_two ) as global_stock
from product
order by 2, 1

または、別のSELECTでラップします。

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
于 2012-08-02T20:59:16.490 に答える
3

1つの解決策は、位置を使用することです。

select  title, 
        ( stock_one + stock_two ) as global_stock
from product
order by 2, 1

ただし、エイリアスは機能するはずですが、必ずしも式である必要はありません。「global_stock=0」とはどういう意味ですか?次のことを意味しますか?

select  title, 
        ( stock_one + stock_two ) as global_stock
from product
order by (case when global_stock = 0 then 1 else 0 end) desc, title
于 2012-08-02T20:58:38.170 に答える
1

誰かがあなたがただできるかどうかグーグルでこれを見つけた場合ORDER BY my_alias:はい、あなたはできます。これには数時間かかりました。

postgresのドキュメントが述べているように:

序数は、出力列の序数(左から右)の位置を示します。この機能により、一意の名前を持たない列に基づいて順序を定義できます。AS句を使用して出力列に名前を割り当てることは常に可能であるため、これが絶対に必要になることはありません。

したがって、これはそれ以降修正されているか、この質問は特にORDER BY my_alias = 0, other_column私が実際に必要としなかった構文に関するものです。

于 2021-04-21T10:34:21.577 に答える