Eggs Sunny Side Up
본문 바로가기
Computer Engineering/DB_Oracle

HAVING

by guswn100059 2023. 3. 3.

1. HAVING 사용이유

SELECT 학생ID, ROUND(AVG(성적), 1) AS 평균성적
  FROM 성적표
 WHERE AVG(성적) <= 75
 GROUP BY 학생ID;

 

 

 

2. HAVING 주의사항

SELECT 부서ID, SUM(연봉)
  FROM 직원 
 GROUP BY 부서ID
HAVING 부서ID IN ('D001', 'D002') ;

SELECT 부서ID, SUM(연봉)
  FROM 직원
 GROUP BY 부서ID
HAVING 연봉 >= 6000;
--SUM(연봉)으로 HAVING에 입력해야함.

SELECT 부서ID, SUM(연봉)
  FROM 직원
 GROUP BY 부서ID
HAVING SUM(연봉) >= 13000;

SELECT 부서ID, SUM(연봉) AS 연봉합계
  FROM 직원
 GROUP BY 부서ID
HAVING 연봉합계 >= 6000;
--연봉합계라는 별명을 입력하면 에러!

 

예제)

--문제1) 수강생정보 테이블에서 소속반 별 인원수가 3명이상인 튜플(행)만 출력해주세요.
SELECT * FROM 수강생정보;
SELECT 소속반, COUNT(학생ID) AS 인원수
  FROM 수강생정보
 GROUP BY 소속반
HAVING COUNT(학생ID) >= 3;

--문제2) 직원 테이블에서 부서별 최고연봉이 7500인 튜플(행)만 출력해주세요.
SELECT * FROM 직원;
SELECT 부서ID, MAX(연봉) AS 최고연봉
  FROM 직원
 GROUP BY 부서ID
HAVING MAX(연봉) = 7500;

--문제3) 성적표 테이블에서 학생별 평균성적을 구하되, 
--평균값이 NULL이 아닌 값만 출력해주세요. 
--(힌트 : HAVING 은 WHERE 절과 똑같이 NULL조건 사용가능)
SELECT * FROM 성적표;
SELECT 학생ID, ROUND(AVG(성적), 1) AS 평균성적
  FROM 성적표
 GROUP BY 학생ID
HAVING AVG(성적) IS NOT NULL;

 

'Computer Engineering > DB_Oracle' 카테고리의 다른 글

DML문법  (0) 2023.03.06
ORDER BY  (0) 2023.03.03
GROUP BY  (0) 2023.03.03
복습용문제_230303  (0) 2023.03.03
ANSI문법  (0) 2023.03.02

댓글