복붙노트

[SQL] PostgreSQL은 : 같은 쿼리에서 계산 된 열을 사용하여

SQL

PostgreSQL은 : 같은 쿼리에서 계산 된 열을 사용하여

나는 포스트 그레스에서 계산 된 열을 사용하는 데 문제가 있어요. 아래에 주어진 SQL에서 작동 유사한 코드는 PostgreSQL의에서이 문제를 다시 생성 할 수 있기?

select cost_1, quantity_1, cost_2, quantity_2, 
      (cost_1 * quantity_1) as total_1,
      (cost_2 * quantity_2) as total_2,
      (calculated total_1 + calculated total_2) as total_3
from data;

PostgreSQL의에서 유사한 코드는 오류가를 반환

해결법

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

    1.당신은 열 별칭에 액세스 할 수 있도록하기 위해 파생 테이블에 SELECT 문을 포장해야합니다

    당신은 열 별칭에 액세스 할 수 있도록하기 위해 파생 테이블에 SELECT 문을 포장해야합니다

    select cost1,
           quantity_1,
           cost_2,
           quantity_2
           total_1 + total_2 as total_3
    from (
        select cost_1, 
               quantity_1, 
               cost_2, 
               quantity_2, 
               (cost_1 * quantity_1) as total_1,
               (cost_2 * quantity_2) as total_2
        from data
    ) t
    

    그 어떠한 성능 저하가되지 않습니다.

    (난 정말 놀랐어요하는 DBMS의 모든에서 원래의 SQL 문 실행)

  2. ==============================

    2.당신이 outerquery와 전체 쿼리를 wraping 마음에 들지 않으면, 당신은 중간 TOTAL_1 및 TOTAL_2을 계산하는 측면을 사용할 수 있습니다 :

    당신이 outerquery와 전체 쿼리를 wraping 마음에 들지 않으면, 당신은 중간 TOTAL_1 및 TOTAL_2을 계산하는 측면을 사용할 수 있습니다 :

    SELECT cost_1, quantity_1, cost_2, quantity_2, total_1, total_2,
           total_1 + total_2 AS total_3
    FROM data
    ,LATERAL(SELECT cost_1 * quantity_1, cost_2 * quantity_2) AS s1(total_1,total_2);
    

    DB 휘티 d 혀라도

    산출:

    ╔═════════╦═════════════╦═════════╦═════════════╦══════════╦══════════╦═════════╗
    ║ cost_1  ║ quantity_1  ║ cost_2  ║ quantity_2  ║ total_1  ║ total_2  ║ total_3 ║
    ╠═════════╬═════════════╬═════════╬═════════════╬══════════╬══════════╬═════════╣
    ║      1  ║          2  ║      3  ║          4  ║       2  ║      12  ║      14 ║
    ║      3  ║          5  ║      7  ║          9  ║      15  ║      63  ║      78 ║
    ║     10  ║          5  ║     20  ║          2  ║      50  ║      40  ║      90 ║
    ╚═════════╩═════════════╩═════════╩═════════════╩══════════╩══════════╩═════════╝
    
  3. ==============================

    3.원칙적으로, 두 가지 당신은 SELECT 절에 대해 알아야 할 필요가있다 :

    원칙적으로, 두 가지 당신은 SELECT 절에 대해 알아야 할 필요가있다 :

    그래서, 짧은 대답은 당신이 할 수없는 것을, 그리고 그 디자인입니다.

    이것에 주목할만한 예외는 참으로 이후의 열 및 WHERE 절에서 계산을 사용할 수있는 마이크로 소프트 액세스입니다. 그 편리 있지만 그러나 실제로는 장점이 아니다 : 위의 원칙을 따르지 않는 것은 덜 효율적이다. 그러나 액세스가 예상되는 것입니다 경량 데이터베이스에 대한 그것의 확인에 사용합니다.

    당신이 정말로 재사용 계산 된 결과를 원하는 경우에, 당신은 하위 쿼리의 형태로 또는 공통 테이블 표현식으로 하나, 별도의 쿼리가 필요합니다. 그들이 읽을 명확이기 때문에 열팽창 계수가 함께 작업에 훨씬 쉽다.

    편집하다

    여기에 혼란을 일으킬 수 계산 열을 사용하는 이유 예입니다. 호주에서는 우리는 여전히 고대 인치 (= 2.54 cm의 1)를 사용하여 어떤 장소가 센티미터의 높이를 측정하지만.

    SELECT
        id,
        height/2.54 as height, -- cm -> in
        case when height>175 then 'tall' else '' end as comment
    FROM people;
    

    여기 CASE 여전히 원래의 높이 값을 사용한다.

  4. ==============================

    4.

    select cost_1, quantity_1, cost_2, quantity_2, 
          cost_1 * quantity_1 as total_1,
          cost_2 * quantity_2 as total_2,
          (cost_1 * quantity_1 + cost_2 * quantity_2) as total_3
    from data;
    
  5. ==============================

    5.당신은 표현의 열 별칭을 사용하려는. 시스템이 허용하는 경우 당신은 단지 문법 설탕 있다고 할 수 있습니다. 이것은 어떤 SQL 언어에서 작동합니다.

    당신은 표현의 열 별칭을 사용하려는. 시스템이 허용하는 경우 당신은 단지 문법 설탕 있다고 할 수 있습니다. 이것은 어떤 SQL 언어에서 작동합니다.

    select 
     cost_1
    ,quantity_1
    ,cost_2
    ,quantity_2
    ,cost_1 * quantity_1 as total_1
    ,cost_2 * quantity_2 as total_2
    ,(cost_1 * quantity_1) + (cost_2 * quantity_2) as total_3 
    
    from data;
    
  6. from https://stackoverflow.com/questions/8840228/postgresql-using-a-calculated-column-in-the-same-query by cc-by-sa and MIT license