如何按PostgreSQL中的计算列进行排序?

时间:2017-10-21 03:22:34

标签: postgresql sorting

我们的offers表格中有许多字段用于确定要约的价格,但价格的一个关键组成部分是从外部API获取的汇率。我们仍然需要按实际当前价格对报价进行排序。

例如,我们假设offers表中有两列:exchangepremium_percentageexchange是外部请求所针对的汇率来源的名称。 premium_percentage由用户设置。在这种情况下,不可能在不知道汇率的情况下按当前价格对报价进行分类,这可能会有所不同,具体取决于exchange列中的内容。

怎么会这样呢?有没有办法让Postgres计算当前价格然后按它排序?

1 个答案:

答案 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;