2017-09-17 6 views
0

SQL에서 각 열의 where 절을 사용하여 두 개의 열 개수를 가져 오려고합니다.SQL - 두 열에 대한 필터

지금

person feature1 feature2 
a  1   1 
a  0   1 
a  1   1 
a  1   1 
a  0   0 
a  1   1 
b  0   1 
c  1   0 

가, 내가 원하는처럼 내 데이터를 사람이 그룹에 데이터를보고 난의 0의 어떤을 계산하고 싶어하지 않는 그룹화 된 데이터가

person feature1 feature2 
    a  2   1 
    b  0   1 
    c  1   0 

같이해야한다고 수 있습니다 1 인당 각 열. SQL을 통해이 작업을 수행하려면 어떻게해야합니까?

+1

행 b의 기능 1은 1이어야합니다. –

답변

3

조건부 집계를 사용하여이 작업을 수행 할 수 있습니다. sum의 조건은 true 또는 false에 따라 1 또는 0을 반환합니다. 하이브에서, 당신은 부울 캐스팅해야

select person,sum(feature1=0),sum(feature2=0) 
from tbl 
group by person 

는 합산 전에 int로 돌아왔다. 각 사람

선택 사람, 계수 비 제로 기능을 계산하는 경우 문을 사용할 수 있습니다 여기에

select person,sum(cast(feature1=0 as int)),sum(cast(feature2=0 as int)) 
from tbl 
group by person 
0

(사건 때 feature1> 0 다음 1 개 null를 끝) F1, 수 (경우 때 feature1 > 0 then 1 else null end) F2 표 1에서 사람을 그룹으로;

+0

'else null'은 중복됩니다. – leftjoin