2016-12-02 3 views
0

그룹과 하위 그룹의 합계 :SQL은 : 나는 다음과 같은 형식의 데이터가

Date All_impressions  Id2_Impressions 
1-Jan  135     45 
2-Jan  375     135 

내가하고 시도 :

SELECT DATE, 
    SUM(Impressions) AS All_impressions 
    , CASE WHEN id=2 SUM(impressions) ELSE 0 
     END as Id2_Impressions 
GROUP BY DATE,id 

Date id impressions 
1-Jan 1 10 
1-Jan 2 20 
1-Jan 3 30 
1-Jan 1 15 
1-Jan 2 25 
1-Jan 3 35 
2-Jan 1 50 
2-Jan 2 60 
2-Jan 3 70 
2-Jan 1 55 
2-Jan 2 65 
2-Jan 3 75 

나는 결과로 원하는

이것은 내가 원하는 방식으로 표시되지 않았습니다. 어떻게해야합니까?

답변

0

가까이 있습니다. 조건부 집계 정확한 구문은 다음

이다
SELECT DATE, 
     SUM(Impressions) AS All_impressions, 
     SUM(CASE WHEN id = 2 THEN impressions ELSE 0 END) as Id2_Impressions 
FROM ?? 
GROUP BY DATE 
ORDER BY DATE; 

에서, CASE 발현이 SUM() 함수의 인수이다. FROM 절도 필요합니다. 나는 그것이 단지 감시 일 뿐이라고 생각한다.

더 최신 버전의 Postgres는 FILTER 절을 지원합니다. 이것은 SUM(CASE)보다 약간 더 효율적일 수 있지만, 시작한 경로는 아닙니다.

+0

안녕하세요 고든, 답장을 보내 주셔서 감사합니다. 나는 내가 어떻게 데이터를 왜곡 한 것을 깨달았다. 지금 소스 데이터를 살펴보십시오. – Cerberus

+0

@ Cerberus. . . 이 대답의 쿼리는 원하는 것을 수행하는 것처럼 보입니다. –