2017-11-24 1 views
0

이 문제는 누락 된 값을 나머지 사용 가능한 값에서 결정한 예상 값으로 대체해야하는 많은 실제 상황에서 발생합니다. 나는 N 값을 가질 수있는 C1, ..., Cn과 같은 열 A의 평균을 계산하려고합니다. 하나의 열이 null 일 때마다 계산 된 평균을 다른 열에있는 값 이상으로 바꾸고 null 열을 제외 시키려고합니다. 예를 들어, 3 개의 열 (c1, C2 및 C3)이있는 경우 세 개의 열 모두에 값이있는 경우이 세 열의 하위 그룹에 대한 평균을보고하고 싶습니다. 세 번째 열의 한 열이 누락되면 다른 두 열의 값에 대한 평균이 계산됩니다. 두 번째 열도 누락 된 경우 평균은 한 열의 값만 계산됩니다.명령에 의한 진행 그룹

그래서 하나 개의 응답이 단지보고이다

Select Avg(A) as AvgA 
From Table 
Group by C1, C2, and C3 

상황에 C3가 null C1 및 C2의 값을 V1 및 V2를 갖고, 여기서 그 AvgA 계산되어야로서 :

Select Avg(A) as AvgA 
From Table 
Where C1=v1 and C2=v2 
Group by C1, C2 

누구나 n 열 모두에 대해 자동으로이 작업을 수행하는 코드를 제공 할 수 있습니까? 일반적인 n 열 솔루션은 n-1 Group By 열을 사용하고 null 인 하나의 열을 삭제할 수 있어야합니다. n-1 Group-By는 v1에서 vn-1 값까지 평가해야합니다.

+1

일부 샘플 데이터와 예상 결과 우트 당신을 돕는 먼 길을 간다. –

답변

0

3 열 중 하나가 null이면 그룹화를 위해 자동으로 다른 2 열을 사용합니다. 3 개 중 2 개가 널 (NULL)이면 세 번째는 그룹화에 사용됩니다. 모두 3이 널이면 결과에서 하나의 행을 가져오고 모든 3은 그룹화로서 널입니다.

Select c1, c2, c3, Avg(A) as AvgA From Table Group by C1, C2, and C3 

즉 귀하의 질문을 이해하면 귀하는 열별로 그룹화해야합니다. 간단한 방법이 충분하지 않은 경우

, 당신은 이런 식으로 뭔가를 시도 할 수 :

Select 
     coalesce(c1,c2,c3) c123 
    , coalesce(c2,c3) c23 
    , c3 
    , Avg(A) as AvgA 
Avg(A) as AvgA From Table 
Group by 
     coalesce(c1,c2,c3) 
    , coalesce(c2,c3) 
    , c3