강의

멘토링

커뮤니티

Inflearn Community Q&A

hmzzanglkm2482's profile image
hmzzanglkm2482

asked

Data Analysis SQL Fundamentals

Practice applying processing columns and case when to the Group By clause

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

Written on

·

3.8K

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

groupbycasewhenDBMS/RDBMSpostgresqlsql

Answer 2

0

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

안녕하세요,

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

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

 

dooleyz3525님의 프로필 이미지
dooleyz3525
Instructor

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

dooleyz3525님의 프로필 이미지
dooleyz3525
Instructor

안녕하십니까, 

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

 

감사합니다. 

hmzzanglkm2482's profile image
hmzzanglkm2482

asked

Ask a question