2013-01-07 3 views
1

멋진 순위 지정 기능을 사용하여 내 포스트그레스 결과를 정렬하고 싶습니다. 그러나 사용자 지정 행을 두 개 추가하고 정렬하려면 간단히 말해 보겠습니다.사용자 지정 명명 된 행으로 정렬

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. 맞춤 검색 결과를 내 주문으로 주문할 수 있습니까?

내가 포스트 그레스 9.1.x SQL 표준으로 당

+0

선택하기 전에 FROM을 호출하지 않습니까? –

+0

맞아요, 죄송합니다, 고정 검색어예요. – user1105595

답변

3

출마의 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; 
+0

흠 ... 그건 좀 별나다. (별칭의 가시성과 관련하여) - 그런 하위 쿼리를 수행 할 수 있는지 모르겠다. (ORM (ActiveRecord)를 통해이 쿼리를 실행하고있다.) 제대로 작동하는지 모르겠다. , 당신의 대답에 감사드립니다, 정말 도움이됩니다! – user1105595

+0

@ user1105595 도와 드리겠습니다. BTW, 이것은 MySQL에서 작동하지만 표준을 따르지 않기 때문입니다. 표준이 이렇게 쓰여진 이유는 분명하지만 개인적으로 나는 당신의 의견에 동의합니다. 그것은 쓸모없는 사마귀입니다. –

관련 문제