작성
·
3K
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
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
감사합니다.
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;