1

postgresの結果をいくつかの凝ったランキング関数で並べ替えたいのですが、簡単にするために、2つのカスタム行を追加して並べ替えたいとしましょう。

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。カスタムの名前付き行で結果を並べ替えることはできますか?

postgres9.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 に答える