본문 바로가기
SQL

SQL select - 실습16

by hj_it 2024. 2. 1.
HAVING
SELECT ...
FROM  테이블 ...
WHERE 조건 ...
GROUP BY 컬럼
HAVING [그룹조건] ...
ORDER BY 정렬_대상 ... ;

- GROUP BY로 그룹화 된 조건을 기술한다.

- 일반 조건은 WHERE 절에 기술하고, 그룹 함수가 포함된 조건은 HAVING 절에 기술한다.

 

 

실습

1. 화학과를 제외하고 학과별로 학생들의 평점 평균을 검색한다.

SELECT major, TO_CHAR(avg(avr), '0.00') 평점_평균
FROM student
GROUP BY major
HAVING major != '화학';

2. 화학과를 제외한 각 학과별 평균 평점 중에 평점이 2.0 이상인 정보를 검색한다.

SELECT major, TO_CHAR(avg(avr), '0.00') 평점_평균
FROM student
GROUP BY major
HAVING major != '화학' AND avg(avr) >= 2.0;

3. 기말고사 평균이 60점 이상인 학생의 정보를 검색한다.(학번과 기말고사 평균)

SELECT st.sno, sname, TO_CHAR(avg(result), '999.99') 기말고사_평균
FROM student st, score sc
WHERE st.sno = sc.sno
GROUP BY st.sno, sname
HAVING avg(result) >= 60;

4. 강의 학점수가 3학점 이상인 교수의 정보를 검색한다.(교수번호, 이름과 담당 학점수)

SELECT p.pno, pname, sum(st_num) 담당_학점수
FROM professor p, course c
WHERE p.pno = c.pno
GROUP BY p.pno, pname
HAVING sum(st_num) >= 3;

5. 기말고사 성적이 핵 화학과목보다 우수한 과목의 과목명과 담당 교수명 검색한다.

SELECT cname, pname
FROM professor p, course c, score sc
WHERE p.pno = c.pno AND c.cno = sc.cno
GROUP BY cname, pname
HAVING avg(result) > (SELECT avg(result) FROM course c, score sc
			WHERE c.cno = sc.cno AND cname='핵화학');

6. 근무 중인 직원이 4명 이상인 부서를 검색한다.

SELECT d.dno, dname, count(eno) 직원수
FROM emp e, dept d
WHERE e.dno = d.dno
GROUP BY d.dno, dname
HAVING count(eno) >= 4;

7. 업무별 평균 년봉이 2만불 이상인 업무를 검색한다.

SELECT job, TO_CHAR(avg(sal*12+NVL(comm,0)), '$999,999.99') 평균_연봉
FROM emp
GROUP BY job
HAVING avg(sal*12+NVL(comm,0)) >= 20000;

8. 각 학과의 학년별 인원중 인원이 5명 이상인 학년을 검색한다.

SELECT major, syear, count(sno) 인원
FROM student
GROUP BY major, syear
HAVING count(sno) >= 5
ORDER BY major;

9. 인원수가 가장 많은 학과를 검색한다.

SELECT major, count(sno) 인원
FROM student
GROUP BY major
HAVING count(sno) = (SELECT max(count(sno)) 
			FROM student
			GROUP BY major);

10. 학생 중 기말고사 성적이 가장 낮은 학생의 정보를 검색한다.

SELECT st.sno, sname, TO_CHAR(avg(result), '999.99') 성적
FROM student st, score sc
WHERE st.sno = sc.sno
GROUP BY st.sno, sname
HAVING avg(result) = (SELECT MIN(avg(result)) FROM student st, score sc
			WHERE st.sno = sc.sno
			GROUP BY st.sno, sname);

'SQL' 카테고리의 다른 글

SQL 테이블 생성과 테이블 타입(DDL)  (0) 2024.02.26
SQL insert, update, delete  (0) 2024.02.02
SQL select - 실습15  (0) 2024.02.01
SQL select - 실습14  (0) 2024.02.01
SQL select - 실습13  (0) 2024.01.31