我们的offers
表格中有许多字段用于确定要约的价格,但价格的一个关键组成部分是从外部API获取的汇率。我们仍然需要按实际当前价格对报价进行排序。
例如,我们假设offers
表中有两列:exchange
和premium_percentage
。 exchange
是外部请求所针对的汇率来源的名称。 premium_percentage
由用户设置。在这种情况下,不可能在不知道汇率的情况下按当前价格对报价进行分类,这可能会有所不同,具体取决于exchange
列中的内容。
怎么会这样呢?有没有办法让Postgres计算当前价格然后按它排序?
答案 0 :(得分:3)
SELECT
product_id,
get_current_price(exchange) * (premium_percentage::float/100 + 1) AS price
FROM offers
ORDER BY 2;
请注意ORDER BY 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;