2016-10-06 6 views
0

각 카테고리에서 상위 세 값을 선택하는 방법, 각 sub_class에서 가장 높은 3 카운트를 선택하는 방법을SQL 나는 테이블이 부문, 그룹, 클래스, sub_class이 포함되어 있습니다

select division ,group,class,sub_class, count(*) as number_cnt, 

       ROW_NUMBER() over (partition by division ,group,class 
       order by number_cnt) as RowNum 
    from mydata 
    order by division,group,class, number_cnt desc 

는 내가 선택하고 싶은 the RowNum < = 3 하지만 반환 할 수 없습니다 number_cnt 해결할 수 있지만이 number_cnt 순서대로 필요합니다.

mydata을 나는 각 sub_class의 수는 내가 각 부문 그룹 클래스 - 서브 클래스 조합

 division group class   subclass  number_cnt 
    plant  fruit tropical fruit banana   10 
             jackfruit  5 
             passion fruit 3 

에 대한 세 가지 수를 골라 희망이

 division group class   subclass  number_cnt 
    plant  fruit tropical fruit banana   10 
             jackfruit  5 
             passion fruit 3 
             coconut   2 

같은 것 계산 한 후 어떤 도움이 필요합니까? 감사합니다. .

+0

여기의 카테고리는 무엇입니까? – Teja

+0

샘플 데이터와 원하는 결과가 실제로 도움이 될 것입니다. –

+0

반환하면 number_cnt 오류를 해결할 수 없지만 number_cnt를 통한 주문은 select보다 뒤쳐져 있다고 생각합니다. – newleaf

답변

0
SELECT division, 
     group, 
     class, 
     sub_class, 
     ROW_NUMBER() over (partition by trade_division ,group,class 
         order by number_cnt) as RowNum 

    FROM 
    (  select division , 
        group, 
        class, 
        sub_class, 
        count(*) OVER (PARTITION BY trade_division,group,class) AS number_cnt    
      from my data 
    ) 

WHERE RowNum <=3 
order by division,group,class, number_cnt desc; 
0

흠. 각 부서/그룹/클래스의 10 개 가장 높은 서브 클래스를 원하는 가정 :

select t.* 
from (select division, group, class, sub_class, count(*) as number_cnt, 
       row_number() over (partition by division, group, class 
            order by count(*) desc 
           ) as seqnum 
     from my data 
     group by division, group, class, sub_class 
    ) t 
where seqnum <= 10; 

당신은 집계와 윈도우 기능을 사용하고 싶습니다. sub_classgroup by에 있지만 partition byrow_number()이 아닙니다.

참고 : 열 이름이 일치하지 않습니다. 이 아닌은 열 이름으로 SQL 키워드 (예 : group)를 사용합니다.

0

도움이 될 경우 시도해주세요.

SELECT * from( 
    select division ,group,class,sub_class, count(*) as number_cnt, 
    ROW_NUMBER() over (partition by trade_division ,group,class 
    order by number_cnt) as RowNum 
    from my data) a 
    WHERE RowNum<=3 
+0

코드를 설명하고 자세한 정보를 제공하면 도움이 될 것입니다. –