[SQL] PostgreSQL은 : 같은 쿼리에서 계산 된 열을 사용하여
SQLPostgreSQL은 : 같은 쿼리에서 계산 된 열을 사용하여
나는 포스트 그레스에서 계산 된 열을 사용하는 데 문제가 있어요. 아래에 주어진 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.당신은 열 별칭에 액세스 할 수 있도록하기 위해 파생 테이블에 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.당신이 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.원칙적으로, 두 가지 당신은 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.
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.당신은 표현의 열 별칭을 사용하려는. 시스템이 허용하는 경우 당신은 단지 문법 설탕 있다고 할 수 있습니다. 이것은 어떤 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;
from https://stackoverflow.com/questions/8840228/postgresql-using-a-calculated-column-in-the-same-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL은 : 2 개의 다른 AUTO_INCREMENT와의 관계 테이블 만들기 (0) | 2020.04.02 |
---|---|
[SQL] GROUP BY와 집계 순차적 인 숫자 값 (0) | 2020.04.02 |
[SQL] 어떻게 동적 SQL 쿼리 세트 테이블 이름? (0) | 2020.04.02 |
[SQL] ON 대 WHERE 절 가입하여 (0) | 2020.04.02 |
[SQL] MySQL의 쿼리에서 UNION과 LIMIT 작업을 결합 (0) | 2020.04.02 |