2013-08-05 2 views
1

내가 6의 값을 보유 할 수있는 열을위한 카운트 (1,2,3, A, B, C)합 열에는 두 개의 서로 다른 값

가이

같다 그래서이를 수 (*) 수
select mycol, count(*) as ttl from mytable group by mycol; 
    mycol ttl 
    1  46 
    2  53 
    3  10 
    A  5 
    B  4 
    C  2 

하지만 난이

mycol total 
var1 51 
var2 57 
var3 12 

처럼 1 초와 같이하고, 2 초와 조식을 요약 할 것이다 이것에 대한 case 문 사용할 수 있습니까? 경우 1 또는 A 다음 그들에게 치료와 같은 동일한

답변

3

예, case 문이 작동됩니다

select (case when mycol in ('1', 'var1') then 'var1' 
      when mycol in ('2', 'var2') then 'var2' 
      when mycol in ('3', 'var3') then 'var3' 
     end), 
     sum(ttl) as Total 
from mytable t 
group by (case when mycol in ('1', 'var1') then 'var1' 
       when mycol in ('2', 'var2') then 'var2' 
       when mycol in ('3', 'var3') then 'var3' 
      end); 

편집 :

당신은 단지 각 값에 대한 여러 행과 데이터가있는 경우 :

select (case when mycol in ('1', 'var1') then 'var1' 
      when mycol in ('2', 'var2') then 'var2' 
      when mycol in ('3', 'var3') then 'var3' 
     end), 
     count(*) as Total 
from mytable t 
group by (case when mycol in ('1', 'var1') then 'var1' 
       when mycol in ('2', 'var2') then 'var2' 
       when mycol in ('3', 'var3') then 'var3' 
      end); 
+0

'GROUP BY 1'이 더 작습니다;) – jaczes

+0

@jaczes. . . 그래, 그게 더 예뻐. 그러나 표준 SQL이 아니며 소수의 SQL 엔진에서만 지원됩니다. –

관련 문제