[SQL] 나는 SELECT 쿼리에서 계산 필드를 다시 사용할 수 있습니까?
SQL나는 SELECT 쿼리에서 계산 필드를 다시 사용할 수 있습니까?
MySQL의 문 내에서 계산 필드를 다시 사용할 수있는 방법이 있나요. 나는에 대한 오류 "알 수없는 열 total_sale"를 얻을 :
SELECT
s.f1 + s.f2 as total_sale,
s.f1 / total_sale as f1_percent
FROM sales s
또는 나는 내가 필요한 모든 계산을 추가 한 경우 매우 긴 SQL 문에 대해 만들 것 계산을 반복해야합니까.
SELECT
s.f1 + s.f2 as total_sale,
s.f1 / (s.f1 + s.f2) as f1_percent
FROM sales s
물론 나는 나의 PHP 프로그램의 모든 계산을 할 수 있습니다.
해결법
-
==============================
1.예, 변수를 재사용 할 수 있습니다. 이것은 당신이 그것을하는 방법이다 :
예, 변수를 재사용 할 수 있습니다. 이것은 당신이 그것을하는 방법이다 :
SELECT @total_sale := s.f1 + s.f2 as total_sale, s.f1 / @total_sale as f1_percent FROM sales s
여기에 대해 자세히 알아보기 : http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
[참고 :이 동작은 정의되지 않는다. MySQL의 문서에 따르면 :]
-
==============================
2.다음은 MySQL의 5.5에 내 테스트에서 잘 작동하는 것 같다 :
다음은 MySQL의 5.5에 내 테스트에서 잘 작동하는 것 같다 :
SELECT s.f1 + s.f2 as total_sale, s.f1 / (SELECT total_sale) as f1_percent FROM sales s
-
==============================
3.전용 크로스 플랫폼 지원 수단은 파생 테이블 / 인라인 뷰를 사용하는 것이다 :
전용 크로스 플랫폼 지원 수단은 파생 테이블 / 인라인 뷰를 사용하는 것이다 :
SELECT x.total_sale, x.f1 / x.total_sale as f1_percent FROM (SELECT s.f1, s.f1 + s.f2 as total_sale, FROM sales s) x
-
==============================
4.당신이 사용할 수있는 서브 - 선택 :
당신이 사용할 수있는 서브 - 선택 :
select tbl1.total_sale, tbl1.f1/tbl1.total_sale as f1_percent from (select s.f1+s.f2 AS total_sale, s.f1 from sales s) as tbl1;
-
==============================
5.이 같은 하위 쿼리를 사용할 수 있습니다 :
이 같은 하위 쿼리를 사용할 수 있습니다 :
SELECT h.total_sale, s.f1 / h.total_sale AS f1_percent FROM sales s, (SELECT id, f1 + f2 AS total_sale FROM sales) h WHERE s.id = h.id
편집하다: 기본 키 가정 고정 직교 제품은 ID이다. 이 최적화 후 OMG 조랑말 '솔루션에 해당해야한다,하지만 난 당신이 더 하위 쿼리가 필요한 경우 읽기 어렵게 될 것이라 생각합니다.
-
==============================
6.여기 다양한 답변을 살펴했고, 몇 가지 실험을했다.
여기 다양한 답변을 살펴했고, 몇 가지 실험을했다.
특히 나는 MariaDB 10.1을 사용하고 있습니다.
는 "간단한"우선 당신은 로버트 D 그의 의견에 무엇을 제안 할 수있다 :
SELECT Price_Per_SqFt, (Price_Per_SqFt/2) AS col1, (SELECT col1 + 1) AS col2 FROM Items
당신이 내부로 집계 함수의 일종을 사용하는 경우 금융 데이터 통화 (NB VAT = "판매 세"를 다음과 같이 접근 방식을 결합 당신이 사용할 수 있지만 내부에이 방법을 결합 할 수 있습니다 가입 ... 그리고 NB 필드는 일반적으로 4 소수점을 가지고, 내가) ... 그것은 역사적인 생각
SELECT invoices.invoiceNo, invoices.clientID, invoices.Date, invoices.Paid, invoicesWithSubtotal.Subtotal, ROUND( CAST( Subtotal * invoices.VATRate AS DECIMAL( 10, 4 )), 2 ) AS VAT, (SELECT VAT + Subtotal) AS Total FROM invoices INNER JOIN ( SELECT Sum( invoiceitems.Charge ) AS Subtotal, invoices.InvoiceNo FROM invoices INNER JOIN invoiceitems ON invoices.InvoiceNo = invoiceitems.InvoiceNo GROUP BY invoices.InvoiceNo ) invoicesWithSubtotal ON invoices.InvoiceNo = invoicesWithSubtotal.InvoiceNo
내가 그들의 합계, 부가가치세 및 합계와 목록 송장에보기를 만들 수 위의를 사용하고 싶었 ... 그것은 MariaDB (그리고 거의 확실 MySQL은) FROM 절에 중첩 허용하지 않는 것이 밝혀졌다. 그러나이 용이하고 InvoiceNo 소계 나열된 첫 번째보기를 제작하고있는 참조 첫 번째 뷰함으로써 해결된다. 성능 현명한 나는 더블보기 배열의 종류에 대해 전혀 생각이 없다.
-
==============================
7.나는 값이 아닌 문자열로서 변수의 @total_sales을 미리 정의했으며, 선택시 유형을 다시 정의하지 않았기 때문에 나는 다음과 같은 테스트되었고,이 모든 시간을 작동하는 것 같다, 아마 이것에 대한 이유가, 그 것이다 문 ??
나는 값이 아닌 문자열로서 변수의 @total_sales을 미리 정의했으며, 선택시 유형을 다시 정의하지 않았기 때문에 나는 다음과 같은 테스트되었고,이 모든 시간을 작동하는 것 같다, 아마 이것에 대한 이유가, 그 것이다 문 ??
나는 다음을 수행하는 경우
set @total_sales = 0; SELECT @total_sale := s.f1 + s.f2 as total_sale, s.f1 / @total_sale as f1_percent FROM sales s
from https://stackoverflow.com/questions/6085443/can-i-reuse-a-calculated-field-in-a-select-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 행의 끝에 '^ M'문자 (0) | 2020.04.10 |
---|---|
[SQL] 조건 고유 제한 조건 (0) | 2020.04.10 |
[SQL] 최대 재귀 (100)는 문이 완료되기 전에 소진 된 (0) | 2020.04.09 |
[SQL] MS Access 테이블로 내보내기 데이터를 엑셀 VBA를 사용하여 (0) | 2020.04.09 |
[SQL] 엑셀 함수는 워크 시트 데이터에 대한 쿼리 SQL-처럼 만들어? (0) | 2020.04.09 |