문제

나는 다소 복잡해 지려고 노력하고있다 SELECT 일반화 할 계산 :

  1. 기본 쿼리는 테이블의 와일드 카드 선택입니다
  2. 하나의 하위 쿼리는 a COUNT() 조건에 따라 모든 항목 중 (이것은 잘 작동합니다)
  3. 또 다른 하위 쿼리는 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가 지원하는지 누가 알겠습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top