2017-10-21 7 views
0

Googleのoffersテーブルには、オファーの価格を決定するいくつかのフィールドがありますが、価格の重要な要素の1つは外部APIからフェッチされた為替レートです。実際の現在の価格でオファーをソートする必要があります。PostgreSQLで計算カラムをソートする方法は?

たとえば、offersテーブルに2つの列、exchangepremium_percentageがあるとします。 exchangeは、外部からの依頼が行われる為替レートの元の名前です。 premium_percentageがユーザーによって設定されます。このような状況では、為替レートを知らずにオファーを現在の価格でソートすることは不可能であり、それはexchangeの列に応じて異なる可能性があります。

これについてはどうすればよいですか? Postgresに現在の価格を計算させ、それによってオファーを並べ替える方法はありますか?

+0

質問を編集し、サンプルデータと希望する結果を提供してください。 –

答えて

2
SELECT 
    product_id, 
    get_current_price(exchange) * (premium_percentage::float/100 + 1) AS price 
FROM offers 
ORDER BY 2; 

ORDER BY 2は、2番目の序数列でソートすることに注意してください。

代わりに、ORDER BY句でソートする式を繰り返すことができます。しかし、それは複数の評価につながる可能性があります。

また、サブクエリですべてをラップすることで、出力列の名前を付けて他の句で参照することもできます。

SELECT product_id, price 
FROM 
(
    SELECT 
     product_id, 
     get_current_price(exchange) * (premium_percentage::float/100 + 1) 
    FROM offers 
) product_prices(product_id, price) 
ORDER BY price; 
+0

ORDER BY句では、出力列名を使用できます。したがって、最初のクエリでは 'ORDER BY price'でもかまいません。 – klin

+0

@klin試しましたか? 'price'はテーブルのカラムではないので、' select'結果リストの計算カラムの別名です。とにかくそれを行うことを許可するデータベースもありますが、SQL標準ではありません.PostgreSQLはそれを許可するものではありません。 –

+0

[documentation:](https://www.postgresql.org/docs/current/static/sql-select.html)*出力列の名前を使用して、ORDER BYおよびGROUP BYの列の値を参照できます節... * [SqlFiddle。](http://sqlfiddle.com/#!17/6efb2/1) – klin

関連する問題