2014-02-10 3 views
0

두 개의 개별 열에 두 개의 개별 카운트를 제공하는 쿼리를 만들려고합니다. 응용 프로그램 수 및 승인 된 응용 프로그램 수입니다. 나는이 시간대를 매월 한시적으로 보여주고 싶다. 하위 쿼리를 사용하는 경우 하위 쿼리가있는 여러 GROUP BY

date  applications approvals 
January 20   3  
February 25   1 
March  20   4 
April  10   2 

, 나는 "MONTH (APPL_CREATE_DT)에 의해 GROUP"를 사용하여 메인 쿼리를 그룹화 : 그래서처럼. 그러나이 문제는 첫 번째 열을 올바르게 그룹화하는 반면 다음 열은 매월 동일한 수를 포함한다는 점입니다. 다른 하위 쿼리 섹션에 동일한 GROUP BY를 추가하면 1242 오류가 발생합니다.

이 문제를 해결하는 방법에 대한 아이디어는 도움이 될 것입니다. 나는 이와 같은 다른 질문을 보았지만 해결을 위해 다른 절에 크게 의존하지 않았습니다.

SELECT 
COUNT(DISTINCT APPL_ID) AS Applications, 
(SELECT COUNT(DISTINCT APPL_ID) 
FROM APPL_APP 
JOIN APPU_APP_USER ON APPL_ID = APPU_APPL_ID 
LEFT JOIN APPD_APP_DECISION ON APPD_APPL_ID = APPL_ID 
WHERE APPD_STATUS = 'LENDER_APPROVED' 
    AND APPU_CUR_STATE = 'TX' 
    AND APPL_CREATE_DT >= '2013-01-01 00:00:00' 
    AND APPL_CREATE_DT <= '2014-01-31 23:59:59' 
GROUP BY MONTH(APPL_CREATE_DT)) AS Approvals 
FROM APPU_APP_USER 
JOIN APPL_APP ON APPL_ID = APPU_APPL_ID 
AND APPL_CREATE_DT >= '2013-01-01 00:00:00' 
AND APPL_CREATE_DT <= '2014-01-31 23:59:59' 
AND APPU_CUR_STATE = 'TX' 
GROUP BY MONTH(APPL_CREATE_DT); 
+0

하위 쿼리에서 MONTH()가 외부 쿼리의 MONTH()와 일치하는 행, 즉 그룹화하려는 행만 선택하십시오. –

+0

여전히 같은 오류가 발생합니다. MONTH (outerTable.APPL_CREATE_DATE) = MONTH (inner_table.APPL_CREATE_DATE)와 같은 일을 보았지만 제대로 작동하도록 배치 할 위치를 알지 못합니다. – user2356890

+0

이러한 질문을하는 좋은 방법은 SqlFiddle을 만들어 사람들이 변경할 수 있도록하는 것입니다. 이 예제를 확인하십시오. http://sqlfiddle.com/#!9/1e85d/5 또한 count (*)로 쿼리의 프레임을 다시 구성 할 수 있다면 다르게 접근 할 수는 있지만 그 값은 App, AppUser 및 AppDecision 간의 관계. –

답변

0

간단하게하기 위해 조건을 삭제했습니다. 당신이

언급 한 바와 같이

나는 MONTH (outerTable.APPL_CREATE_DATE) 같은 = MONTH (inner_table.APPL_CREATE_DATE)

당신 말이 맞아요을하고 고개를했다.

하지만 난 당신을 도움이 될 쿼리를 다음 희망

작동하도록 배치 할 위치를 알 수 없습니다.

SELECT 
    COUNT(DISTINCT APPL_ID) AS Applications, 
    (
     SELECT COUNT(DISTINCT APPL_ID) 
     FROM APPL_APP INNER JOIN APPU_APP_USER ON APPL_ID = APPU_APPL_ID 
      LEFT JOIN APPD_APP_DECISION ON APPD_APPL_ID = APPL_ID 
     WHERE APPD_STATUS = 'LENDER_APPROVED' 
      AND MONTH(APPL_CREATE_DT) = MONTH(t1.APPL_CREATE_DT) 
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^= This condition added 
     GROUP BY MONTH(APPL_CREATE_DT) 
    ) AS Approvals 
FROM APPL_APP t1 INNER JOIN APPU_APP_USER ON APPL_ID = APPU_APPL_ID 
       ^^===== Alias added 
GROUP BY MONTH(APPL_CREATE_DT); 

MySQL의 상관 된 하위 쿼리는 내 경험상 성능이 현저히 떨어집니다. 가능한 경우 하위 쿼리 만 사용하여 쿼리를 변환하십시오.