1

我想通过一些花哨的排名函数对我的 postgres 结果进行排序,但为了简单起见,假设我想添加两个自定义行并按它们排序。

SELECT my_table.*,
  extract(epoch from (age(current_date, '2012-09-12 10:43:40'::date)))/3600 AS age_in_hours
  Fancy_function_counting_distance() AS distance
FROM my_table
ORDER BY distance + age_in_hours;

但是,它不起作用,因为我收到错误:ERROR: column "distance" does not exist. 是否可以按自定义命名行对我的结果进行排序?

我正在运行 postgres 9.1.x

4

1 回答 1

3

根据 SQL 标准,SELECT列表中的别名在ORDER BY.

您可以使用列位置规范(例如ORDER BY 1,2),但这不接受表达式;ORDER BY 1+2例如,你不能。因此,您需要使用子查询来生成结果集,然后在外部查询中对其进行排序:

SELECT *
FROM (
  SELECT my_table.*,
    extract(epoch from (age(current_date, '2012-09-12 10:43:40'::date)))/3600 AS age_in_hours
    Fancy_function_counting_distance() AS distance
  FROM my_table
) x
ORDER BY distance + age_in_hours;
于 2013-01-07T09:58:22.607 回答