where 절은 group 함수를 쓰지 못함
select AVG(salary) from employees;
# 행 전체의 평균
Bash
복사
select MAX(salary) from employees;
# 행 전체 중에 가장 큰 수
Bash
복사
select MIN(salary) from employees;
# 행 전체 중에 가장 작은 수
Bash
복사
select SUM(salary) from employees;
# 행 전체를 다 더하기
Bash
복사
select MAX(hire_date), MIN(hire_date) from employees;
# 타입에서 가장 작은 값, 큰 값 구하기
Bash
복사
select COUNT(*) from employees;
# 행이 몇 개 있는지 출력
Bash
복사
select COUNT(commission_pct) from employees;
# 행 중에 null 값을 제외 후 행 개수 출력
Bash
복사
select COUNT(nvl(commission_pct, 0)) from employees;
# 행 중에 null 값도 포함하여 행 개수 출력
Bash
복사
select COUNT(DISTINCT department_id) from employees;
# 중복 제외 후 행 개수 출력
Bash
복사
select AVG(nvl(commission_pct, 0)) from employees;
# null 값은 0으로 계산하여 평균 값 구하기
Bash
복사
select MAX(commission_pct) / COUNT(employee_id) from employees;
# 커미션 최대 값을 전체 사원 수로 나눈 값 구하기
Bash
복사
select
SUM(CASE WHEN deptno = 10 THEN sal END) "10"
,SUM(CASE WHEN deptno = 20 THEN sal END) "20"
,SUM(CASE WHEN deptno = 30 THEN sal END) "30"
from emp;
# 부서번호별 토탈월급을 가로로 출력
Bash
복사
select
SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1980' THEN sal END) as "1980"
,SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1981' THEN sal END) as "1981"
,SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1982' THEN sal END) as "1982"
,SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1983' THEN sal END) as "1983"
from emp;
# 입사한 년도별 토탈월급 가로로 출력
Bash
복사
select job,
SUM(CASE WHEN deptno = 10 THEN sal END) as "10"
,SUM(CASE WHEN deptno = 20 THEN sal END) as "20"
,SUM(CASE WHEN deptno = 30 THEN sal END) as "30"
from emp
group by job;
# 직업, 부서번호, 직업별 부서번호별 토탈 월급 출력
Bash
복사
GROUP BY
select department_id, AVG(salary) from employees
GROUP BY department_id;
# department_id가 같은 것끼리의 평균 월급 구하기
Bash
복사
select job, TO_CHAR(SUM(sal), '9,999') from emp
where job != 'SALESMAN'
group by job
order by SUM(sal) desc;
# 직업이 SALESMAN인 사원은 빼고 직업, 직업별 토탈월급 천단위로 출력
Bash
복사
select deptno, SUM(sal) from emp group by deptno;
# 부서번호, 부서번호별 토탈월급 출력
Bash
복사
select department_id, job_id, SUM(salary)
from employees
group by department_id, job_id
order by department_id;
# department_id, job_id가 둘 다 같아야 합쳐짐
Bash
복사
select department_id, AVG(salary)
from employees
group by department_id
having AVG(salary) > 8000;
# where 절에서 group 함수를 사용하지 못해서 having이라는 게 존재함
Bash
복사
select job, SUM(sal)
from emp
group by job;
# job 별로 토탈월급 출력
Bash
복사
select job, SUM(sal)
from emp
group by job
HAVING SUM(sal) >= 5000;
# job. 별로 토탈월급이 5000이상이면 출력
Bash
복사
select TO_CHAR(hiredate, 'YYYY'), SUM(sal)
from emp
group by TO_CHAR(hiredate, 'YYYY');
# 입사한 년도별 토탈월급 출력
Bash
복사
select deptno,
SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1980' THEN sal END) as "1980",
SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1981' THEN sal END) as "1981",
SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1982' THEN sal END) as "1982",
SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1983' THEN sal END) as "1983"
from emp
group by deptno;
# 부서번호, 입사한 년도, 부서번호별 입사한년도의 토탈월급 출력
Bash
복사
select deptno,
CASE WHEN SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1980' THEN sal END) >= 3000 THEN SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1980' THEN sal END) END "1980",
CASE WHEN SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1981' THEN sal END) >= 3000 THEN SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1981' THEN sal END) END "1981",
CASE WHEN SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1982' THEN sal END) >= 3000 THEN SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1982' THEN sal END) END "1982",
CASE WHEN SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1983' THEN sal END) >= 3000 THEN SUM(CASE TO_CHAR(hiredate, 'YYYY') WHEN '1983' THEN sal END) END "1983"
from emp
group by deptno;
select TO_CHAR(hiredate, 'YYYY'), sal
from emp
order by TO_CHAR(hiredate, 'YYYY');
# 부서번호, 입사한 년도, 부서번호별 입사한년도의 토탈월급이 3000 이상이면 출력
Bash
복사
