我想通过一些花哨的排名函数对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
答案 0 :(得分: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;