2017-10-21 3 views
0

offers 테이블에는 제안 가격을 결정하는 여러 필드가 있지만 가격에 중요한 요소 중 하나는 외부 API에서 가져온 환율입니다. 실제 가격으로 제안을 정렬해야합니다.PostgreSQL에서 계산 된 열을 기준으로 정렬하는 방법?

예를 들어 offers 테이블에 두 개의 열 (exchangepremium_percentage)이 있다고 가정 해 보겠습니다. exchange은 외부 요청이 이루어지는 환율의 소스 이름입니다. premium_percentage은 사용자가 설정합니다. 이 경우 환율을 알지 못한 채 현재 가격으로 쿠폰을 분류 할 수 없으며 이는 exchange 열의 내용에 따라 다를 수 있습니다.

어떻게 이런 문제가 발생합니까? Postgres가 현재 가격을 계산하고 그 가격으로 제안을 정렬 할 수있는 방법이 있습니까?

+0

질문을 편집하고 샘플 데이터와 원하는 결과를 제공하십시오. –

답변

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

두 번째 서 수열로 정렬하려면 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; 
+0

ORDER BY 절에서 출력 열 이름을 사용할 수 있으므로 첫 번째 쿼리에서 'ORDER BY price'가 될 수도 있습니다. – klin

+0

@klin 시도해 보셨습니까? 'price'는 어떤 테이블의 칼럼이 아니기 때문에'select' 결과리스트에서 계산 된 칼럼의 별명입니다. 어쨌든 그것을 할 수있는 데이터베이스가 있지만 SQL 표준은 아니며 PostgreSQL은이를 허용하는 데이터베이스가 아닙니다. –

+0

[documentation :] (https://www.postgresql.org/docs/current/static/sql-select.html) * 출력 열의 이름을 사용하여 ORDER BY 및 GROUP BY의 열 값을 참조 할 수 있습니다 clauses ... * [SqlFiddle.] (http://sqlfiddle.com/#!17/6efb2/1) – klin

관련 문제