계산 된 열 2 개의 계산 된 열을 기반으로합니다
-
23-08-2019 - |
문제
나는 다소 복잡해 지려고 노력하고있다 SELECT
일반화 할 계산 :
- 기본 쿼리는 테이블의 와일드 카드 선택입니다
- 하나의 하위 쿼리는 a
COUNT()
조건에 따라 모든 항목 중 (이것은 잘 작동합니다) - 또 다른 하위 쿼리는 a
SUM()
다른 조건을 기준으로 열의 숫자. 기록이 조건을 충족하지 않는 경우를 제외하고는 올바르게 작동합니다.NULL
.
처음에는 두 가지 하위 쿼리를 추가하고 싶었습니다. (subquery1)+(subquery2) AS total
SubQuery2가 NULL이 아니라면 잘 작동합니다. total
SubQuery1의 결과에 관계없이 NULL이됩니다. 두 번째 생각은 두 하위 쿼리를 계산하는 세 번째 열을 만들려고 노력하는 것이 었습니다. (subquery1) AS count1, (subquery2) AS count2, count1+count2 AS total
) 그러나 나는 계산 된 두 개의 열을 계산할 수 없다고 생각합니다. 그렇지 않더라도 같은 문제가 적용되는 것 같습니다.
누구든지 두 개의 하위 쿼리 값을 얻고 내 프로그램에 총액을 얻지 못한이 문제에 대한 우아한 솔루션이 있습니까?
감사!
해결책
여기에서 진행되는 두 가지 문제 :
동일한 선택 목록에서 다른 표현식에서 하나의 열 별칭을 사용할 수 없습니다.
그러나 파생 된 테이블 하위 쿼리에서 별명을 설정하고 외부 쿼리에서 사용할 수 있습니다.
당신은 null과 산술을 할 수 없습니다 Null은 0이 아닙니다.
그러나, 당신은 "기본"null을
COALESCE()
기능. 이 함수는 첫 번째가 아닌 인수를 반환합니다.
예는 다음과 같습니다.
SELECT *, count1+count2 AS total
FROM (SELECT *, COALESCE((subquery1), 0) AS count1,
COALESCE((subquery2), 0) AS count2
FROM ... ) t;
(이 예제에서 파생 된 테이블에 "t"라는 테이블 별명이 제공되어야한다는 것을 기억하십시오)
다른 팁
우선, Coalesce 기능은 귀무 문제를 처리하는 데 도움이됩니다.
노조를 사용 하여이 두 쿼리를 단일 결과 세트로 병합 한 다음 추가 분석을위한 하위 쿼리로 취급 할 수 있습니까?
아니면 내가 당신의 질문을 완전히 이해하지 못했습니까?
다음과 같은 것 (두 번째 쿼리의 경우)을 시도 할 것입니다.
해당 열의 인스턴스가 0 인 경우 NULL 대신 0을 반환해야합니다.
말하기는 불필요하지만 프로그램 내부에서 사용하기 때문에 휴대 성 문제로 인해 두 가지 결과 (NULL 및 숫자)를 합산하기 위해 프로그램 논리를 사용하는 것이 좋습니다.
Coalesce 기능이 감가 상각되는시기 또는 다른 DBMS가 지원하는지 누가 알겠습니까?