Search

그룹화 함수

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
복사