2017-11-28 8 views
0

최소 값을 : 각 PRODUCT_ID에 대한 최소한의 수는 각 레벨분 빈 제외하고 내가 여기에 샘플 데이터를

예상 결과입니다 내가해야 할 것은

= 10093 3 183 184 185 

하지만 같은 제품 ID에 대해 여러 행이 한, 레벨 4

Click here for example dataset- Product in different levels

select 
cc.product_id, 
substring_index(substring_index(concat(cc.path, '/////'), '/', 2), '/', -1) as level_2, 
substring_index(substring_index(concat(cc.path, '/////'), '/', 3), '/', -1) as level_3, 
substring_index(substring_index(concat(cc.path, '/////'), '/', 4), '/', -1) as level_4, 
substring_index(substring_index(concat(cc.path, '/////'), '/', 5), '/', -1) as level_5 

from 
cc 
에서 184 위에 빈 선택 당신이 0 값을 필터링 집계 할 때

답변

0

당신은 case 사용할 수 있습니다

select product_id, 
     min(case when level_2 + 0 > 0 then level_2 + 0 end) as min_level_2, 
     min(case when level_3 + 0 > 0 then level_3 + 0 end) as min_level_3, 
     min(case when level_4 + 0 > 0 then level_4 + 0 end) as min_level_4, 
     min(case when level_5 + 0 > 0 then level_5 + 0 end) as min_level_5 
from (select cc.product_id, 
      substring_index(substring_index(concat(cc.path, '/////'), '/', 2), '/', -1) as level_2, 
      substring_index(substring_index(concat(cc.path, '/////'), '/', 3), '/', -1) as level_3, 
      substring_index(substring_index(concat(cc.path, '/////'), '/', 4), '/', -1) as level_4, 
      substring_index(substring_index(concat(cc.path, '/////'), '/', 5), '/', -1) as level_5 
     from cc 
    ) cc 
group by product_id; 

참고 : 또한 when level_2 <> ''으로 조건을 작성할 수 있습니다.