중복제거 D03

최성진·2023년 2월 13일
0

DBMS

목록 보기
5/12

중복제거

1. DISTINCT

  • 차례대로 읽어오면서 중복되는것을 제거하는 방법.
    (살짝 표본채취해서 가죠오는 느낌?)

2. GROUP BY

  • 데이터를 그룹핑해서 그 결과를 가져오는 경우 사용한다.
  • 집계함수와 짝을 이루어 사용할 수 있다.
    (데이터를 다 묶어서 가지고 있는 상태이다)

---오더바이는 그룹바이도!!!
ORDER BY , , *** 이렇게 여러게 지정해줄수있다 .

3. HAVING

  • where 절에서는 집계함수를 사용 할 수 없다.
  • HAVING 절은 집계함수를 가지고 조건비교를 할때 사용한다.
  • 단독사용은 불가능하고 반드시 GROUP BY 절과 함께 사용.
SELECT 	DISTINCT DEPARTMENT_ID 
FROM 	EMPLOYEES e 
;

- GROUP BY

SELECT 	DEPARTMENT_ID 	
FROM 	EMPLOYEES e 
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID 
;

/*
-- 사용불가
SELECT 	DISTINCT  DEPARTMENT_ID , SUM(SALARY) 
FROM 	EMPLOYEES e 
;
*/

- 부서별 급여합계

SELECT 	DEPARTMENT_ID , SUM(SALARY) 
FROM 	EMPLOYEES e
GROUP BY DEPARTMENT_ID
;

- 부서별 사원수와 급여평균, 급여 합

SELECT 	DEPARTMENT_ID , SUM(SALARY),
		COUNT(DEPARTMENT_ID), AVG(SALARY)
FROM 	EMPLOYEES e
GROUP BY DEPARTMENT_ID 
;

- 부서별, 직급별 사원수와 평균 급여를 구하시오

SELECT 	DEPARTMENT_ID , JOB_ID ,
		SUM(SALARY) , COUNT(SALARY) , AVG(SALARY)
FROM 	EMPLOYEES e 
--WHERE 	DEPARTMENT_ID = 80
GROUP BY DEPARTMENT_ID , JOB_ID 
ORDER BY DEPARTMENT_ID , JOB_ID 
;

- 사원수가 10명 이상인 부서를 조회

-- 단, 부서가 null인 사람은 제외
SELECT 	DEPARTMENT_ID ,COUNT(*) 
FROM 	EMPLOYEES e 
WHERE	DEPARTMENT_ID IS NOT NULL
GROUP BY DEPARTMENT_ID 
HAVING 	COUNT(*) >= 10 
;

문제

-- 문제1) EMPLOYEES 테이블에서 job_id가 'SA'로 시작하는 
-- 사람에 대하여 
-- 급여의 평균, 최고액, 최저액, 합계를 구하여 출력하여라.
SELECT 	AVG(SALARY), MAX(SALARY), MIN(SALARY), SUM(SALARY)  
FROM 	EMPLOYEES e 
WHERE 	JOB_ID LIKE 'SA%'
;


-- 문제2) EMPLOYEES 테이블에 등록되어 있는 인원수, 
-- 커미션이 NULL이 아닌 인원수, 연봉평균, 
-- 등록되어 있는 부서의 수를 구하여 출력하라.
SELECT 	COUNT(*)  , AVG(SALARY),COUNT(DISTINCT DEPARTMENT_ID) ,
		COUNT(COMMISSION_PCT) 
FROM 	EMPLOYEES e 
;


-- 문제3) EMPLOYEES 테이블에서 부서별로 인원수, 
-- 평균 급여, 최저급여, 최고 급여, 급여의 합을 구하여 출력하라.
SELECT 	DEPARTMENT_ID, COUNT(*) , AVG(SALARY), MIN(SALARY),
		MAX(SALARY), SUM(SALARY)  
FROM 	EMPLOYEES e 
GROUP BY DEPARTMENT_ID
;


-- 문제4) EMPLOYEES 테이블에서 각 부서별 인원수,
-- 급여의 평균, 최저 급여, 최고 급여, 급여의합을 
-- 급여합이 많은 사람순으로 출력
SELECT 	DEPARTMENT_ID , COUNT(*),
		AVG(SALARY), MIN(SALARY), MAX(SALARY),
		SUM(SALARY)
FROM 	EMPLOYEES e 
GROUP BY DEPARTMENT_ID
ORDER BY sum(SALARY) DESC 
;


-- 문제5) EMPLOYEES 테이블에서 부서별, 업무별 그룹하여 
-- 결과를 부서번호, 
-- 업무, 인원수, 급여의 평균, 급여의 합을 구하여 출력하여라.

SELECT	DEPARTMENT_ID , JOB_ID ,
		COUNT(*), AVG(SALARY), SUM(SALARY)  
FROM 	EMPLOYEES e 
GROUP BY DEPARTMENT_ID , JOB_ID
;

-- 문제6) EMPLOYEES 테이블에서 부서 인원이 4명보다 
-- 많은 부서의 부서번호, 
-- 인원수, 급여의 합을 구하여 출력하여라

SELECT 	DEPARTMENT_ID , COUNT(*), SUM(SALARY)
FROM 	EMPLOYEES e 
GROUP BY DEPARTMENT_ID 
HAVING COUNT(*)>4 
;

-- 문제7) EMPLOYEES 테이블에서 급여가 최대 10000이상인 부서에 
-- 대해서 부서번호, 
-- 평균 급여, 급여의 합을 구하여 출력하여라.

SELECT 	DEPARTMENT_ID , AVG(SALARY), SUM(SALARY), MAX(SALARY) 
FROM 	EMPLOYEES e 
GROUP BY DEPARTMENT_ID 
HAVING  MAX(SALARY) >= 10000
;

-- 문제8) EMPLOYEES 테이블에서 업무별 급여의 평균이 10000 
-- 이상인 업무에 대해서 업무명,
-- 평균 급여, 급여의 합을 구하여 출력하라.

SELECT 	JOB_ID , AVG(SALARY), SUM(SALARY)  
FROM 	EMPLOYEES e 
GROUP BY JOB_ID 
HAVING 	AVG(SALARY) >= 10000
;



-- 문제9) EMPLOYEES 테이블에서 전체 월급이 10000을 초과하는 
-- 각 업무에 대해서 업무와 월급여 합계를 출력하라. 
-- 단 판매원(SA_)은 제외하고 월 급여 합계로 정렬(내림차순)하라.

SELECT 	JOB_ID , SUM(SALARY) 
FROM 	EMPLOYEES e 
WHERE  	JOB_ID NOT LIKE 'SA%'
GROUP BY JOB_ID 
HAVING 	SUM(SALARY)>10000
ORDER BY SUM(SALARY) DESC 
;

-- 문제10) 동일한 직업(JOB_ID)을 가진 사원들의 총 수를 조회한다.

SELECT 	JOB_ID , COUNT(*) 
FROM 	EMPLOYEES e
GROUP BY JOB_ID 
ORDER BY JOB_ID 
;
profile
마부리입니다

0개의 댓글