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

sni*_*tko 4 sorting postgresql

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

例如,假设我们在offers表中有两列:exchangepremium_percentage。的exchange是源的汇率,所述外部的请求将被做出的名称。premium_percentage由用户设置。在这种情况下,无法在不知道汇率的情况下按当前价格对报价进行排序,而且可能会因exchange列中的内容而异。

怎么办呢?有没有办法让 Postgres 计算当前价格,然后根据它对报价进行排序?

Cra*_*ger 11

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

请注意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;
Run Code Online (Sandbox Code Playgroud)

  • 在 ORDER BY 子句中,您可以使用输出列名,因此在第一个查询中也可以是“ORDER BY price”。 (2认同)