DB/sql

5. select 심화 - subGroup

wooweee 2023. 4. 16. 15:22
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
;