DBMS 3일차

전영덕·2023년 2월 10일
0

DBMS

목록 보기
3/7

필기

  • 중복제거에는 distinct 와 group by 2가지 방법이 있다.
    group by : data를 그룹핑해서 그 결과를 가져오는 경우에 사용한다.
    집계함수와 짝을 이루어 사용할 수 있다.

  • having절 : where 절에서는 집계함수를 사용할 수 없다.
    having절은 집계함수를 가지고 조건비교를 할 때 사용한다.
    having절은 group by 절과 함께 사용한다.

  • *로 가져오면 행을 가져오는것
-- 중복제거 DISTINCT
SELECT 	DISTINCT DEPARTMENT_ID 
FROM 	EMPLOYEES e 
ORDER BY DEPARTMENT_ID 
;
--group by
SELECT 	DEPARTMENT_ID 
FROM 	EMPLOYEES e 
GROUP BY DEPARTMENT_ID 
ORDER BY DEPARTMENT_ID 
;
-- distinct와 GROUP BY 는 결과값이 같다. 하지만 distinct는 뽑아만 오는 거라면
-- group by : data를 그룹핑해서 그 결과를 가져오는 경우에 사용한다. 집계함수와 짝을 이루어 사용할 수 있다.


-- 부서별 급여합계 - distinct 오류남

--SELECT 	DISTINCT department_ID, sum(salary)
--FROM EMPLOYEES e
--;

-- 부서별 급여합계 = group by
SELECT 	department_ID, sum(salary)
FROM EMPLOYEES e
GROUP BY DEPARTMENT_ID 
;

-- 부서별 사원수와 평균 급여, 급여의 합
SELECT 	DEPARTMENT_ID , COUNT(DEPARTMENT_ID)  , sum(SALARY), avg (SALARY)
FROM   	EMPLOYEES e 
GROUP BY DEPARTMENT_ID 
;

-- 부서별, 직급별(job_id), 사원수와 평균 급여를 구하시오.
SELECT 	DEPARTMENT_ID , JOB_ID , COUNT(*),  avg(SALARY)
FROM 	EMPLOYEES e 
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
;

-day03 quiz (그대로 DBeaver에 옮겨서 풀어보기)

-- 문제1) EMPLOYEES 테이블에서 job_id가 'SA'로 시작하는 
-- 사람에 대하여 
-- 급여의 평균, 최고액, 최저액, 합계를 구하여 출력하여라.

-- 문제2) EMPLOYEES 테이블에 등록되어 있는 인원수, 
-- 커미션이 NULL이 아닌 인원수, 연봉평균, 
-- 등록되어 있는 부서의 수를 구하여 출력하라.

-- 문제3) EMPLOYEES 테이블에서 부서별로 인원수, 
-- 평균 급여, 최저급여, 최고 급여, 급여의 합을 구하여 출력하라.


-- 문제4) EMPLOYEES 테이블에서 각 부서별 인원수,
-- 급여의 평균, 최저 급여, 최고 급여, 급여의합을 
-- 급여합이 많은 부서순으로 출력

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

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

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

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

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

-- 문제10) 동일한 직업(JOB_ID)을 가진 사원들의 총 수를 조회한다.
  • day03 quiz + answer
-- 사람에 대하여 
-- 급여의 평균, 최고액, 최저액, 합계를 구하여 출력하여라.
SELECT 	AVG(SALARY),  MAX(SALARY), MIN(SALARY), sum(SALARY)
FROM 	EMPLOYEES e 
WHERE 	JOB_ID LIKE 'SA%'
;
-- 문제2) EMPLOYEES 테이블에 등록되어 있는 인원수, 
-- 커미션이 NULL이 아닌 인원수, 연봉평균, 
-- 등록되어 있는 부서의 수를 구하여 출력하라.
SELECT 	COUNT(*), COUNT(COMMISSION_PCT), avg(SALARY), COUNT(DISTINCT DEPARTMENT_ID) 
FROM 	EMPLOYEES e 
;
-- 문제3) EMPLOYEES 테이블에서 부서별로 인원수, 
-- 평균 급여, 최저급여, 최고 급여, 급여의 합을 구하여 출력하라.
SELECT 	DEPARTMENT_ID , count(*), 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 max(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을 초과하는 
-- 각 업무에 대해서 업무와 월급여 합계를 출력하라. 
-- 단 판매원(job_id)(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 
;

0개의 댓글