2016-11-15 5 views
0

내가 가지고 Vertica의 DB에 다음과 같은 테이블 :이 같은 테이블의 결과로, 그룹 각 판독을 좋아하고, 사건의 빈도를 계산 것캡슐화하여 그룹 또는 Vertica의 조건부 집계 DB

+---------+-------+ 
| Readout | Event | 
+---------+-------+ 
|  1 | A  | 
|  1 | B  | 
|  1 | A  | 
|  2 | B  | 
|  2 | A  | 
+---------+-------+ 

:

+---------+----------------+----------------+-----------------+ 
| Readout | Count(Readout) | Count(Event A) | Count (Event B) | 
+---------+----------------+----------------+-----------------+ 
|  1 |    3 |    2 |    1 | 
|  2 |    2 |    1 |    1 | 
+---------+----------------+----------------+-----------------+ 

내가 쉽게 GROUP BY 명령이 있는지,하지만 내가 주위에 내 머리를 정리하고 수 없습니다.

답변

4

당신은 조건부 집계합니다 :

select readout, count(*), 
     sum(case when event = 'A' then 1 else 0 end) as num_a, 
     sum(case when event = 'B' then 1 else 0 end) as num_b 
from t 
group by readout; 
+0

에픽를, 많은 매력처럼, 덕분에 작품! 후속 질문 : 이벤트 이름을 지정해야합니까? 테이블에있는 모든 가능한 이벤트 목록이없는 경우 테이블의 모든 이벤트 이름에 대해이 작업을 수행하려면 어떻게해야합니까? – valenzio

+0

@valenzio. . . 이벤트 목록이 없으면 동적 SQL이 필요할 수 있습니다. 나는 Vertica가'crosstab()'을 지원한다고 생각하지 않는다. –

+0

파이썬에서 명령을 실행하고 있으므로 첫 번째 querry를 만들 수 있습니다. 이벤트 (DISTINCT) 목록을 얻었습니까? 그리고 for 루프를 사용하여 제안한 쿼리를 작성하십시오. – valenzio