2015-01-06 2 views
-1

현재 수신 된 총 응용 프로그램 수와 특정 응용 프로그램 상태에 해당 응용 프로그램 수를 나타내는 쿼리가 나옵니다. 그러면 상태 및 클라이언트별로 그룹화됩니다. 아래를 참조Subquery Counting Totals 문제

SELECT STATE AS State1, CLIENT AS Client1, COUNT(DISTINCT ID) AS Count1, 
(SELECT COUNT(DISTINCT APPLICATION_ID) 
FROM APPLICATION TABLE 1 
LEFT JOIN APPLICATION TABLE 2 ON ID1 = ID2 
WHERE STATUS = 'APPROVED' 
AND DATE_FORMAT(CREATE_DT, '%Y-%m-%d') = '2013-03-28') AS COUNT2 
FROM APPLICATION TABLE 
JOIN USER TABLE ON USER_ID = ID 
LEFT JOIN DECISION TABLE ON DECISITON_ID = ID 
WHERE DATE_FORMAT(CREATE_DT, '%Y-%m-%d') = '2013-03-28' 
GROUP BY STATE, CLIENT; 

출력하고자 아래와 같은 :

State Client  App Count  Approved Count 
AL  Client 1  2    1 
AL  Client 2  4    3 
AL  Client 3  10    2 
TX  Client 1  9    6 
TX  Client 4  4    3 
KS  Client 6  6    4 
KS  Client 9  12    10 

그러나, 나는 점점 오전 다음

State Client  App Count  Approved Count 
AL  Client 1  2    29 
AL  Client 2  4    29 
AL  Client 3  10    29 
TX  Client 1  9    29 
TX  Client 4  4    29 
KS  Client 6  6    29 
KS  Client 9  12    29 

나는의 보조 수를 합계 할 수있는 일 특정 상태에있는 앱이 올바르게 있습니까?

+0

원하는 경우이 간단한 두 단계 과정을 따르십시오. 1. 아직 수행하지 않은 경우 문제를보다 쉽게 ​​복제 할 수 있도록 적절한 DDL (및/또는 sqlfiddle)을 제공하십시오. 2. 아직 수행하지 않은 경우 1 단계에서 제공된 정보에 해당하는 원하는 결과 세트를 제공하십시오. – Strawberry

답변

0

상관 하위 쿼리에 대한 필요가 없습니다, 당신은 당신이 당신의 하위 쿼리 호출을 할 때, 당신은 그룹과 연관되지 않은 같은 select 문

SELECT STATE AS State1, CLIENT AS Client1, COUNT(DISTINCT ID) AS Count1, 
SUM(STATUS = 'APPROVED') as Count2 
FROM APPLICATION 
JOIN USER ON USER_ID = ID 
LEFT JOIN DECISION ON DECISITON_ID = ID 
WHERE DATE_FORMAT(CREATE_DT, '%Y-%m-%d') = '2013-03-28' 
GROUP BY STATE, CLIENT; 
0

에 모두를 얻을 수 있습니다. 따라서 전체 테이블에서 하위 쿼리가 합계 (승인 된 상태의 경우에만 해당)하므로 각 행에서 동일한 결과를 얻습니다. 이 문제를 해결하려면, 당신과 같이 당신의 하위 쿼리에 상태 및 클라이언트에 대한 제한을 포함해야합니다

SELECT STATE AS State1, CLIENT AS Client1, COUNT(DISTINCT ID) AS Count1, 
(SELECT COUNT(DISTINCT APPLICATION_ID) 
FROM APPLICATION AS INNER_APPLICATION 
LEFT JOIN APPLICATION_2 ON ID1 = ID2 
WHERE STATUS = 'APPROVED' 
-- these two lines make it work 
AND INNER_APPLICATION.STATE = APPLICATION.STATE 
AND INNER_APPLICATION.CLIENT = APPLICATION.CLIENT 
AND DATE_FORMAT(CREATE_DT, '%Y-%m-%d') = '2013-03-28') AS COUNT2 
FROM APPLICATION 
JOIN USER TABLE ON USER_ID = ID 
LEFT JOIN DECISION TABLE ON DECISITON_ID = ID 
WHERE DATE_FORMAT(CREATE_DT, '%Y-%m-%d') = '2013-03-28' 
GROUP BY STATE, CLIENT; 

나는 그들에 공백이 있었기 때문에 일부 테이블의 이름을 변경했고, 그 이유는 명확하지 않았다.

하위 쿼리의 다른 테이블에 참여하고 있으므로 @ 레이더의 대답을 사용할 수 없습니다. 그러나 하위 쿼리가 외부 쿼리와 동일한 테이블에 대해 계산하는 경우 문제없이 수행 할 수 있습니다.