2016-11-19 1 views
2

현재 그룹 내 그룹 수를 찾아야하는 문제가 있습니다. 그러나 포괄적 인 그룹에 대해 온라인으로 만들고 작은 그룹을 문자열 내에 연결하려고합니다.다른 그룹 내의 SQL 그룹

---------------------------------------- 
Timestamp   ID    Member 
---------------------------------------- 
1     1    A 
1     1    B 
1     2    A 
1     2    B 
1     2    C 
2     1    A 
2     2    A 
2     2    A 
2     2    C 
---------------------------------------- 

가 지금은 각 ID의 많은 (별개의) 회원이 테이블에 얼마나 각각의 타임 스탬프, 즉, 결과가해야을 위해 찾으려면 :

다음 표는 내가 현재 직면하고있는 상황을 보여줍니다 다음과 같이 :


Timestamp   MemberIDCount 
---------------------------------------- 
1     1:2,2:3 
2     1:1,2:2 
---------------------------------------- 

즉, 문자열의 형식은 다음과 같습니다

두 개의 연속적인 그룹 별 (즉, 타임 스탬프와 ID를 처음으로 계산할 때 ID를, 문자열 연결의 경우 타임 스탬프를 사용하여)이 문제를 해결할 수 있습니다. 그러나 큰 데이터 세트에 적용해야하고 2 개의 그룹 별을 실행해야하기 때문에 더 똑똑한 솔루션이되기를 바랍니다. Cloudera Impala와 함께 작업하지만 다른 SQL 언어의 솔루션도 환영합니다.

도움 주셔서 감사합니다.

답변

2

group bygroup_concat()을 사용하면됩니다. 나는 손에 임팔라를 가지고 있지 않지만,이 같은 작업을해야합니다 :

select timestamp, 
     group_concat(concat_ws(':', member, cnt)) 
from (select timestamp, member, count(*) as cnt 
     from t 
     group by timestamp, member 
    ) tm 
group by timestamp 
order by timestamp; 
+0

참조 : https://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala_group_concat.html –