본문 바로가기

Database

[Oracle] GROUP BY절, HAVING절

 

GROUP BY절 

하나 이상의 Column을 기준으로 그룹으로 묶어서 결과를 가져온다.

 

부서별 평균 급여를 검색
->SELECT department_id, avg(salary) FROM employees GROUP BY department_id;

 

부서별로 사원의 수와 커미션을 받는 사원의 수를 검색
-> SELECT department_id, count(*), count(commission_pct)  
     FROM employees 
     GROUP BY department_id 
     ORDER BY department_id;

 


화학과 학년별 평균 학점을 검색 
->SELECT syear, major, avg(avr) FROM student  where major = '화학' GROUP BY major, syear ORDER BY syear;

 


각 학과별 학생수를 검색
->SELECT major, count(*) FROM student GROUP BY major;



화학과 생물학과 학생을 4.5환산 학점의 평균을 각각 검색
->SELECT major, avg(avr*4.5/4.0) FROM student WHERE major IN('화학','생물')  GROUP BY major;




HAVING 절


전체 그룹에서 일부 그룹만 추출하기 위해 사용


부서별 급여 평균이 5000미만인 부서의 부서번호와 평균급여를 검색하라.
->SELECT department_id, avg(salary)
    FROM employees
    GROUP BY department_id
    HAVING avg(salary) < 5000;




화학과를 제외한 학생들의 과별 평점평균을 검색
->SELECT major, avg(avr) FROM student GROUP BY major HAVING NOT major = '화학';


화학과를 제외한 각 학과별 평점 중 평점이 2.0이상 학과정보를 검색
->SELECT major, avg(avr) FROM student GROUP BY major HAVING NOT major = '화학' AND avg(avr) > 2.0;


근무중인 직원 3명 이상인 부서를 검색
->SELECT dno, count(*) FROM emp GROUP BY dno HAVING count(*) >= 3;