2014-10-05 4 views
2

전체 그룹을 추론하는 데 사용하려는 많은 하위 그룹이 있습니다.SQL을 사용하여 하위 그룹에서 전체 그룹을 추론

    다른 메이저 리그
  • 명이
  • 아무도 모든 클래스를 완료 없다
  • 같은 수업을 할 수는 없지만 각 클래스 : 조건에, 개인이 가지고있는 클래스에 의해 주요 요구 사항을 추론하는 노력이라고 생각 그래서 여기 시작 적어도 한 사람

에 의해 촬영되었습니다 :

class activity individual 
1  fishin  A 
1  fishin  B 
2  trappin  A 
2  trappin  C 
3  hikin   B 
3  hikin   C 
4  jumpin  D 
4  jumpin  E 
5  rollin  E 

이 될 것입니다 :

class activity individual classes in major 
1  fishin  A   fishin, hikin, trappin 
1  fishin  B   fishin, hikin, trappin 
2  trappin  A   fishin, hikin, trappin 
2  trappin  C   fishin, hikin, trappin 
3  hikin   B   fishin, hikin, trappin 
3  hikin   C   fishin, hikin, trappin 
4  jumpin  D   jumpin, rollin 
4  jumpin  E   jumpin, rollin 
5  rollin  E   jumpin, rollin 

이것은 group_concat을 수반하지만 전반적인 쿼리를 파악하려고합니다.

+0

개인 D가 '뛰는 것'을 보여주지 않고 개인 E가 '롤인'을 보여 주겠습니까? –

+0

샘플 데이터에 중복 행이 있습니다. 샘플 데이터에서 마지막 행까지 두 번째 행이 개별 D가 아닌 개별 E를 가져야한다고 생각합니다. –

+0

이렇게하면 재귀 적 CTE가 필요합니다. 귀하의 SQLite 버전이 충분히 새로운가요? –

답변

1

당신은이 작업을 수행하는 재귀 CTE를 사용하여 적어도 SQLite는 3.8.3가 필요합니다

with recursive x as (
    select 
    individual, 
    activity 
    from 
    tbl 
    union 
    select 
    x.individual, 
    t2.activity 
    from 
    x 
     inner join 
    tbl t1 
     on x.activity = t1.activity 
     inner join 
    tbl t2 
     on t1.individual = t2.individual 
), y as (
    select 
    individual, 
    group_concat(distinct activity) g 
    from 
    x 
    group by 
    individual  
) select 
    t.*, 
    y.g 
from 
    y 
    inner join 
    tbl t 
    on y.individual = t.individual; 

나는 그룹에서 항목의 순서에 영향을 미칠 수있는 방법을 알아낼 수 없었다. 또한 SQLFiddle에는 데모를 표시 할 수있을만큼 높은 SQLite 버전이 없습니다.