• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    미해결

case when과 group by 혼용시 case가 3개 이상일 경우 오류

22.06.01 18:26 작성 조회수 2.04k

0

안녕하세요,

만약에 아래 스터디케이스에서

job= 'SALESMAN'인 경우 SALESMAN으로,

job in ('PRESIDENT', 'ANALYST')인 경우 ROYAL로,

나머지 케이스는 OTHERS로 정의해서 avg_sal을 group by 하려면 어떻게 해야 하나요? 제가 아래 케이스처럼 진행했더니 오류가 생기더라고요.

 

-- job이 SALESMAN인 경우와 그렇지 않은 경우만 나누어서 평균/최소/최대 급여를 구하기. 

select case when e.job='SALESMAN' then 'SALESMAN',

case when e.job in ('PRESIDENT', 'ANALYST') then 'ROYAL'

else 'OTHERS' end as sales_or_not, avg(e.sal), max(e.sal), min(e.sal)

from hr.emp e

group by sales_or_not

order by sales_or_not desc

 

 

select job, avg(sal) from hr.emp

group by job

답변 2

·

답변을 작성해보세요.

0

안녕하세요,

적어주신대로 실행해보았는데 다음과 같이 오류가 발생해서요..ㅠㅠ

어떻게 수정해야 할까요..?

 

case가 2번 들어갔군요. 아래와 같이 적용해 보십시요. 

select case when e.job='SALESMAN' then 'SALESMAN'

       when e.job in ('PRESIDENT', 'ANALYST') then 'ROYAL'

       else 'OTHERS' end as sales_or_not, avg(e.sal), max(e.sal), min(e.sal)

from hr.emp e

group by case when e.job='SALESMAN' then 'SALESMAN'

              when e.job in ('PRESIDENT', 'ANALYST') then 'ROYAL'

              else 'OTHERS' end

order by 1 desc;

0

안녕하십니까, 

group by 를 사용할 경우 select 절에 올수 있는 것은 group by 절에 사용한 컬럼(또는 가공 컬럼)과 집계함수 입니다.  따라서 아래와 같이 group by 를 case 절에 사용하면 됩니다.

select case when e.job='SALESMAN' then 'SALESMAN',

case when e.job in ('PRESIDENT', 'ANALYST') then 'ROYAL'

else 'OTHERS' end as sales_or_not, avg(e.sal), max(e.sal), min(e.sal)

from hr.emp e

group by case when e.job='SALESMAN' then 'SALESMAN',

case when e.job in ('PRESIDENT', 'ANALYST') then 'ROYAL'

else 'OTHERS' end

order by 1 desc

 

감사합니다.