복붙노트

[SQL] 어떻게 PostgreSQL의 ORDER BY 절에서 별칭을 사용 하는가?

SQL

어떻게 PostgreSQL의 ORDER BY 절에서 별칭을 사용 하는가?

나는 다음과 같은 쿼리를 가지고 :

SELECT 
    title, 
    (stock_one + stock_two) AS global_stock
FROM
    product
ORDER BY
    global_stock = 0,
    title;

PostgreSQL의 8.1.23에서 그것을 실행하면이 오류를 얻을 :

쿼리 실패 : ERROR : 열이 "global_stock"존재하지 않는

아무도 나에게 작업에 넣어 도울 수 있는가? 나는 그들 후 사용할 수없는 항목을 먼저 사용 가능한 항목이 필요합니다. 많은 감사합니다!

해결법

  1. ==============================

    1.당신이 방법 BY 항상 주문할 수 있습니다 :

    당신이 방법 BY 항상 주문할 수 있습니다 :

    select 
        title, 
        ( stock_one + stock_two ) as global_stock
    from product
    order by 2, 1
    

    또는 다른 SELECT에 포장 :

    SELECT *
    from
    (
        select 
            title, 
            ( stock_one + stock_two ) as global_stock
        from product
    ) x
    order by (case when global_stock = 0 then 1 else 0 end) desc, title
    
  2. ==============================

    2.한 가지 해결책은 위치를 사용하는 것입니다 :

    한 가지 해결책은 위치를 사용하는 것입니다 :

    select  title, 
            ( stock_one + stock_two ) as global_stock
    from product
    order by 2, 1
    

    그러나 별명은 작동해야하지만 반드시 식입니다. 당신은 "global_stock = 0"에 의해 무엇을 의미합니까? 당신은 다음을 의미합니까 :

    select  title, 
            ( stock_one + stock_two ) as global_stock
    from product
    order by (case when global_stock = 0 then 1 else 0 end) desc, title
    
  3. from https://stackoverflow.com/questions/11785622/how-to-use-an-alias-in-a-postgresql-order-by-clause by cc-by-sa and MIT license