인프런 커뮤니티 질문&답변

Jaguar Black님의 프로필 이미지
Jaguar Black

작성한 질문수

데이터 분석 SQL Fundamentals

Group By 절에 가공 컬럼 및 case when 적용 실습

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

작성

·

3.1K

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

Jaguar Black님의 프로필 이미지
Jaguar Black
질문자

안녕하세요,

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

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

 

권 철민님의 프로필 이미지
권 철민
지식공유자

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

 

감사합니다. 

Jaguar Black님의 프로필 이미지
Jaguar Black

작성한 질문수

질문하기