2017-11-16 2 views
0

나는이 내 쿼리입니다 산술 연산자를 수행하기 위해 노력하고있어,요약하는 방법 두 개의 필드

SELECT 

    GLB.BEGIN_BALANCE_DR_BEQ + GLB.BEGIN_BALANCE_CR_BEQ AS ACTIVITY, 
    GLB.PERIOD_NET_DR + GLB.PERIOD_NET_CR AS BEG_BALANCE , 
    ACTIVITY + BEG_BALANCE AS END_BALANCE, 
    SUM(ACTIVITY) AS TOTAL_ACT, 
    SUM(BEG_BALANCE) AS TOTAL_BEG_BALANCE, 
    SUM(END_BALANCE) AS TOTAL_END_BALANCE, 

그러나이 사람이 내가 그것을 고칠 수있는 방법 나를 인도 할 수, 작동하지 않았다?!

당신이 빠른 사용을 위해 서브 쿼리를 사용한다

+1

나머지 절반은 어떻게 되나요? 나머지는 어떻게 보이나요? – jarlh

+0

제대로 태그를주십시오. 그것은 MySQL이나 오라클 중 하나 일 수도 있고 둘 다일 수도 없습니다. – Eric

+0

또한 게시 한 쿼리가 제대로 작동하지 않습니다. – Eric

답변

2

는 동일한 선택 수준에 별칭을 사용할 수 없습니다 (당신은에 의해 적절한 그룹없이 집계 열을 집계 레벨을 사용하지 수 없습니다)을 yor의 경우 예 :

SELECT 
     SUM(ACTIVITY) AS TOTAL_ACT, 
     SUM(BEG_BALANCE) AS TOTAL_BEG_BALANCE, 
     SUM(END_BALANCE) AS TOTAL_END_BALANCE 
     FROM( 
     SELECT 

     GLB.BEGIN_BALANCE_DR_BEQ + GLB.BEGIN_BALANCE_CR_BEQ AS ACTIVITY, 
     GLB.PERIOD_NET_DR + GLB.PERIOD_NET_CR AS BEG_BALANCE , 
     ACTIVITY + BEG_BALANCE AS END_BALANCE 
     FROM My_TABLE 
    ) T 
+0

별칭이 할당 된 쿼리의 SELECT 목록에서'ACTIVITY' 및'BEG_BALANCE'를 참조 할 수 있다고 생각하지 않습니다. 인라인 뷰에서 'END_BALANCE'를 반환하려면 SELECT 목록에서 사용할 수있는 열을 참조하는 식을 사용해야합니다. 이 경우에는'END_BALANCE'를 반환 할 필요가 없다고 생각합니다. 외부 쿼리에서 SUM (END_BALANCE) 대신 'SUM (ACTIVITY + BEG_BALANCE)'를 사용할 수 있습니다. – spencer7593

0

이 쿼리에는 두 가지 유형의 연산이 혼합되어 있습니다. 처음 세 줄은 단일 행 작업이고 마지막 세 줄은 다중 행 작업입니다. 작성된대로 각 행에 대해 GLB.BEGIN_BALANCE_DR_BEQ + GLB.BEGIN_BALANCE_CR_BEQ AS ACTIVITY의 값을 요구하고 모든 행에 대해 ACTIVITY의 합계를 요구합니다.

모든 행에 걸쳐 각 필드의 합계를 원하면 sum(...) 함수에서 각 호출을 래핑해야합니다. 단일 및 다중 행 필드를 혼합하려면 두 개의 쿼리로 분할해야합니다.

1

쿼리의 SELECT 목록에 할당 된 별칭이 SELECT 목록의 다른 곳이나 같은 쿼리의 WHERE 절에서 참조되는 것은 유효하지 않습니다. (MySQL에는 ORDER BY와 HAVING에서 열 별칭을 참조 할 수있는 확장이 있습니다.) SELECT 목록에서 별칭을 참조하려는 경우 한 가지 옵션은 질의를 인라인보기로 만드는 것입니다. 외부 쿼리는 별칭을 열 이름으로 참조 할 수 있습니다. 간단한 예를 들어 ...

SELECT c.myalias 
     , c.fee 
     , c.myalias + c.fee AS grand_tot 
    FROM (SELECT t.somecol + t.othercol AS `myalias` 
       , t.fi + t.fo + t.fum  AS `fee` 
      FROM t 
     ) c 

성능상의 이유로, 우리는 일반적으로 인해 파생 테이블로 인라인 뷰를 구체화하는 비용에,이 일을 피할 것이다. 표현식을 반복해야하는 경우에도 인라인보기를 피하고 사용 가능한 열을 참조하는 것이 훨씬 더 효율적입니다.

SELECT t.somecol + t.othercol      AS `myalias` 
     , t.fi + t.fo + t.fum       AS `fee` 
     , t.somecol + t.othercol + t.fi + t.fo + t.fum AS `grand_tot` 
    FROM t 

그것은 결과 집합의 TWE 반환 할 필요가있는 것을 명확하지 않다.

합계 만 있으면 인라인보기를 피하고 글 머리 기호를 물고 SELECT 목록에서 사용할 수있는 열을 참조하는 식을 사용하면됩니다. 이상한 결과를 반환하는 것처럼 보입니다.

SELECT SUM(GLB.BEGIN_BALANCE_DR_BEQ 
      + GLB.BEGIN_BALANCE_CR_BEQ 
     ) AS TOTAL_ACT 
    , SUM(GLB.PERIOD_NET_DR 
      + GLB.PERIOD_NET_CR 
     ) AS TOTAL_BEG_BALANCE 
    , SUM(GLB_GLB.BEGIN_BALANCE_DR_BEQ 
      + GLB.BEGIN_BALANCE_CR_BEQ 
      + GLB.PERIOD_NET_DR 
      + GLB.PERIOD_NET_CR 
     ) AS TOTAL_END_BALANCE 
    FROM ...