수업/DB

230615 DB HAVING 절

보더96 2023. 6. 15. 10:45

HAVING : 그룹에 대한 조건

  • - WHERE 절에서는 집계함수를 사용 할 수 없다.
  • - HAVING 절은 집계함수를 가지고 조건비교를 할 때 사용한다.
  • - HAVING절은 GROUP BY절과 함께 사용이 된다

FROM  -->  WHERE  -->  GROUP BY  -->  HAVING  -->  SELECT  -->  ORDER BY

                                         |ㅡㅡㅡㅡㅡㅡㅡㅡ여러행 함수 가능 ㅡㅡㅡㅡㅡㅡㅡㅡㅡ|

 

★★소계, 총계구하려면 ROLLUP, CUBE  -->  한번 찾아보기 공부해보기★★

 

GROUP BY 절에서 사용한 컬럼만, SELECT절에서 여러행 함수와 함께 사용할수있다!!

 

 

 

 

 

 

 

 

 

ㅡㅡ급여가 5000 이상인 사원의 사번, 급여, 부서번호를 출력하시오.ㅡㅡㅡㅡ

SELECT salary, employee_id,department_id
FROM employees
WHERE salary >= 5000;

 

ㅡㅡ급여가 5000 이상인 사원의 부서별 부서번호, 총급여를 출력하시오.ㅡㅡ

SELECT department_id, SUM(salary)
FROM employees
WHERE salary >= 5000

GROUP BY department_id;

 

ㅡㅡ급여가 5000 이상인 사원의 부서별 부서번호, 총급여를 출력하시오.ㅡㅡ

ㅡ단, 부서별 총급여가 20000이하인 부서들만 출력한다.ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

SELECT department_id, SUM(salary)
FROM employees
WHERE salary >= 5000

GROUP BY department_id

HAVING SUM(salary)<=20000;

 

ㅡㅡ부서별, 직무별 부서번호, 직무번호, 사원수를 출력하시오ㅡㅡㅡㅡㅡ

ㅡ작은 부서번호부터, 사원수가 많은 직무부터 출력한다ㅡㅡㅡㅡㅡㅡㅡㅡ

COUNT(*)   -->  사원 수를 뜻함

SELECT department_id, job_id, COUNT(*)

FROM employees

GROUP BY department_id, job_id

ORDER BY department_id, COUNT(*) DESC;

 

오름차순일 경우 NULL값이 가장 마지막에 나온다!!

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

GROUP BY 절에서 사용한 컬럼만, SELECT절에서 여러행 함수와 함께 사용할수있다!!

ㅡㅡ부서별 최대급여를 출력하시

SELECT department_id, MAX(salary)

FROM employees

--WHERE

GROUP BY department_id

--HAVING

--ORDER BY

;

ㅡㅡ부서별 최대급여자의 사원의 사번, 이름, 최대급여를 출력하시오 <--  SUBQUERY로 해결!

SELECT department_id,

                employee_id, first_name, salary, MAX(salary)

FROM employees

--WHERE

GROUP BY department_id;  (XXXXXXXX안됨XXXXXXX)

 

GROUP BY 절에서 사용한 컬럼만, SELECT절에서 여러행 함수와 함께 사용할수있다!!

ㅡㅡ지역별 지역번호(location_id), 부서수를 출력하시오

SELECT location_id, COUNT(*)

FROM departments

GROUP BY location_id;

 

 

ㅡㅡ지역별 지역번호(location_id), 도시명(city), 부서수를 출력하시오

SELECT location_id, city, COUNT(*) 부서수

FROM departments

 

ㅡㅡ급여가 5000 이상인 사원의 부서별 부서번호, 총급여를 출력하시오.ㅡㅡ

ㅡ단, 부서별 총급여가 20000이하인 부서들만 출력한다.ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

ㅡ부서배치를 받지 못한 사원은 제외한다

SELECT department_id, SUM(salary)
FROM employees
WHERE salary >= 5000 AND department_id IS NOT NULL
GROUP BY department_id
HAVING SUM(salary)<=20000