column을 row로 출력하기

select deptno, sum(sal)
from emp
group by deptno;
select deptno, decode(deptno, 10, sal, null)
from emp;
select sum(decode(deptno, 10, sal, null)) as "10"
from emp;
💡
- 컬럼별칭 사용시 숫자를 사용하려면
반드시** 더블 쿼테이션 마크(" ") **를 사용해야함- 오라클 전체를 통틀어서 더블 쿼테이션 마크(" ")를 쓰는 경우는
이 경우 밖에 없고, 나머지는 전부** 싱글 쿼테이션 마크(' ') **
select sum(decode(deptno, 10, sal, null)) as "10",
sum(decode(deptno, 20, sal, null)) as "20",
sum(decode(deptno, 30, sal, null)) as "30"
from emp;
select job, sum(sal)
from emp
group by job;
select sum(decode(job, 'ANALYST', sal, null)) "ANALYST",
sum(decode(job, 'CLERK', sal, null)) "CLERK",
sum(decode(job, 'MANAGER', sal, null)) "MANAGER",
sum(decode(job, 'PRESIDENT', sal, null)) "PRESIDENT",
sum(decode(job, 'SALESMAN', sal, null)) "SALESMAN"
from emp;
select telecom, round(avg(age))
from emp21
group by telecom;

select round(avg(decode(telecom, 'SKT', age, null))) "SKT",
round(avg(decode(telecom, 'KT', age, null))) "KT",
round(avg(decode(telecom, 'LG', age, null))) "LG"
from emp21;

select deptno, count(*) 인원수
from emp
group by deptno;
select sum(decode(deptno, 10, 1, null)) as "10",
sum(decode(deptno, 20, 1, null)) as "20",
sum(decode(deptno, 30, 1, null)) as "30"
from emp;
-- 또는
select count(decode(deptno, 10, 1, null)) as "10",
count(decode(deptno, 20, 1, null)) as "20",
count(decode(deptno, 30, 1, null)) as "30"
from emp;
select job, sum(decode(deptno, 10, 1, null)) "10",
sum(decode(deptno, 20, 1, null)) "20",
sum(decode(deptno, 30, 1, null)) "30"
from emp
group by job;
💡 group by 필수
안쓰면 단일행 함수라서 에러발생
select count( decode( telecom, 'SKT', 1, null) ) as "SKT",
count( decode( telecom, 'LG', 1, null) ) as "LG",
count( decode( telecom, 'KT', 1, null) ) as "KT"
from emp21;
select age, count(decode(telecom, 'SKT', age, null)) "SKT",
count(decode(telecom, 'KT', age, null)) "KT",
count(decode(telecom, 'LG', age, null)) "LG"
from emp21
group by age
order by age;

select age, count(decode(telecom, 'SKT', 1, null)) as "SKT",
count(decode(telecom, 'LG', 1, null)) as "LG",
count(decode(telecom, 'KT', 1, null)) as "KT",
count(*) as 인원수
from emp21
group by age
order by age asc;

select nvl(to_char(age), '토탈') as age, count(decode(telecom, 'SKT', 1, null)) as "SKT",
count(decode(telecom, 'LG', 1, null)) as "LG",
count(decode(telecom, 'KT', 1, null)) as "KT",
count(*) as 인원수
from emp21
group by rollup(age)
order by age asc;