728x90
- select 2가지 분류
-- 부서별 직원 평균 연봉
SELECT DEPT_ID, AVG(SALARY) as AvgSalary
FROM STUDENT.S_EMP
group by DEPT_ID
order by DEPT_ID
;
-- 각 부서별로 직책이 사원인 직원들의 평균 급여
SELECT DEPT_ID , AVG(se.SALARY)
FROM S_EMP se
WHERE TITLE ='사원'
group by se.DEPT_ID
;
-- 각 지역별 부서가 몇개인지
SELECT REGION_ID , COUNT(NAME)
FROM S_DEPT sd
group by REGION_ID
;
-- 각 부서별로 평균 급여를 구하되, 평균 급여가 2000 이상
-- 각 부서별 : group, 평균 급여 조건문 : group의 data를 통한 조건문이므로 having
SELECT DEPT_ID, AVG(SALARY)
FROM S_EMP se
group by se.DEPT_ID
HAVING AVG(SALARY) >= 2000
;
-- 각 지역별 부서의 평균 급여가 2000이상인 부서의 개수
SELECT count(*)
from (
SELECT DEPT_ID
FROM S_EMP se
group by dept_id
HAVING AVG(SALARY) >= 2000
)
;
-- 각 직책별로 급여의 총합을 구하고 직책이 부장인 사람은 제외
-- 직책별 : group
-- 급여총합(sum(salary))이 8000 이상인 직책(title) : having
-- 직책이 부장 제외 : group과 관련 없는 조건 : where
SELECT TITLE, SUM(SALARY)
FROM S_EMP se
WHERE TITLE NOT LIKE ('%부장')
group by se.TITLE
HAVING SUM(SALARY) >= 8000
;
-- 각 부서별 직책이 사원인 직원들에 대해서면 평균 급여
-- 각 부서별 : gruop
-- 직책이 사원 : where
SELECT DEPT_ID, AVG(SALARY)
FROM S_EMP se
WHERE TITLE = '사원'
group by DEPT_ID
;
-- 부서별 급여의 최소값과 최대값 나타내고 최소값과 최대값이 같은 부서는 출력
SELECT DEPT_ID, MAX(SALARY), MIN(SALARY)
FROM STUDENT.S_EMP
group by DEPT_ID
HAVING MAX(SALARY) != MIN(SALARY)
-- 동일: HAVING MAX(SALARY) <> MIN(SALARY)
order BY DEPT_ID
;
-- subgroup --
-- 부서내 각 직책별로 몇 명의 인원이 있는지 나타내기
SELECT DEPT_ID , TITLE, COUNT(ID)
FROM STUDENT.S_EMP
group by DEPT_ID, TITLE
;