**칼럼값의 항목별로 나타내는 것
group by 칼럼값을 종류별로 나타내는 것
형식)
select 칼럼명 from 테이블명 group by 칼럼명;
예)
모든 사원의 평균급여를 출력
select avg(esal) from emp;
직급별 모든 사원의 평균급여 출력
select avg(esal) from emp group by erank;
// 결과값 : 평균값만 나옴
어떤직급의 평균급여인지 까지 출력
select erank, avg(esal) from emp group by erank;
** 오류발생 빈번한 경우
select ename, erank, avg(esal) from emp group by erank;
==> group by 절에 나타난 칼럼만이 select 절에 올 수 있다.
연습문제)
근무개월수가 60개월 이상인 근로자의 부서별 모든사원의 평균연봉을 출력하시오.
단, 평균연봉이 높은순으로 출력
select dname, avg(esal*12) annsal from emp, dept
where emp.dno = dept.dno
and months_between(sysdate, ehiredate) >= 60
group by dname
order by avg(esal*12) desc;
** having
: group by 절에 나타난 결과에 조건식을 부여하고자 할 때 사용
연습문제2)
근무개월수가 60개월 이상인 근로자의 부서별 모든사원의 평균연봉을 출력하시오.
단, 평균급여가 8000만원 이상인 부서만 출력합니다.
단, 평균연봉이 높은순으로 출력
select dname, avg(esal*12) annsal from emp, dept
where emp.dno = dept.dno
and months_between(sysdate, ehiredate) >= 60
group by dname
having avg(esal*12) >= 8000
order by avg(esal*12) desc;
** select 문의 형식
select 칼럼명1, 칼럼명2, ... from 테이블1, 테이블2,....
where 조건식
group by 절
having 구문
order by ;
연습문제3)
2015년 이전에 입사한 남자근로자들의 직급별 최고급여를 출력하시오.
단, 최고급여가 300만원 이상인 직급만 출력하시오.
또, 최고급여가 높은순으로 출력합니다.
select erank, max(esal) 최고급여 from emp
where to_char(ehiredate, 'yyyy') <= 2015
and substr(ejumin, 8, 1) = '1'
group by erank
having max(esal) >= 300
order by max(esal) desc;
'JAVA > Oracle' 카테고리의 다른 글
오라클 - union 명령어 예제 및 궁금증(max에 변수 여러개 가능?, 서비쿼리 결과를 가상의 테이블인 = 연산자로 판별?) (0) | 2016.06.18 |
---|---|
오라클 - outter join 설명 및 예제 (0) | 2016.06.18 |
오라클 - references 관련 설명 및 예제 및 개체무결성과 참조무결성 (2) | 2016.06.18 |
오라클 - join 에 대한 설명 및 예제 (0) | 2016.06.18 |
오라클 예제 - 날짜관련 함수 및 to_char 사용 예제 (0) | 2016.06.18 |