group by 함수 확장.
select department_name, job_title, round(avg(salary),2) AS SVG_SAL
from employees e JOIN departments d on d.department_id = e.department_id
JOIN jobs j on e.job_id = j.job_id
group by department_name, job_title
// round 함수가 집함 함수이기에 group by를 사용하지 않으면 단일함수가 아니라는 오류가 뜸
// select 문에서 개인(department_name, job_title)인 것을 group by 에 묶어주면 됨
group by rollup
그훕화 할 조건이 있으면, 우측부터 하나씩 제외하며 결과를 반환.
ex. 부서별 평균급여, 직무별 평균급여를 구하는데 사용
* 직무별, 부서별, 한집단의 전체 평균 급여
select department_name, job_title, round(avg(salary),2) AS SVG_SAL
from employees e JOIN departments d on d.department_id = e.department_id
JOIN jobs j on e.job_id = j.job_id
/* group by department_name, job_title */
group by rollup(department_name, job_title)
/* 출력값
DEPARTMENT_NAME JOB_TITLE SVG_SAL
Accounting Accounting Manager 12000
Accounting Public Accountant 8300
Accounting 10150
*/
// ex. Public Accountant(일반직원)들의 평균 급여와 Accounting Manager(팀장,매니저)들의 평균급여를
// 출력함과 동시에, 일반직원과 매니저 두 집단의 평균도 구하여 출력 (SVG_SAL, 10150)
// group by rollup을 사용하지 않고, 일반 group by를 사용하면,
// 두 집단의 평균값(department_name의 accounting 전체)은 나오지 않음.
group by cube
3차원적인 분석을 가능하게 하는 기능.
전체집계, a와 b의 통합 집계, a만 집계, b만 집계 식으로 활용.
ex. 부서별 평균 급여, 직무별 평균급여 함께 쿼리.
select department_name, job_title, round(avg(salary),2) AS SVG_SAL
from employees e JOIN departments d on d.department_id = e.department_id
JOIN jobs j on e.job_id = j.job_id
/* group by department_name, job_title */
group by cube(department_name, job_title)
DEPARTMENT_NAME JOB_TITLE SVG_SAL
6485.38
President 24000
Accountant 7920
Programmer 5760
Stock Clerk 2785
// group by rollup 과 동일한 값이 출력이 되지만,
// order by 를 사용하지 않고, department_name이 없는 값부터. cube 묶어서 출력.
// 출력 순서. department_name 기준 전체 급여의 평균, IT 부서 급여 평균 Sales 부서 급여 평균 등..
Transaction, lock, Rollback, View, Compile (0) | 2022.06.09 |
---|---|
계층적 질의 (0) | 2022.06.09 |
집합 연산자 (합집합, 차집합, 교집합 등) (0) | 2022.06.08 |
SUB QUERY (0) | 2022.06.08 |
JOIN (Oracle JOIN, ANSI JOIN, INNER JOIN, OUTER JOIN, SELF JOIN) (0) | 2022.06.08 |