반응형
< GROUP BY >
특징 :
- 여러 데이터에서 의미 있는 하나의 결과를 특정 열 값별로 묶어서 출력한다
- UNION 과 같은 결과의 값을 간결화한다
- ORDER BY 와 함께 사용하여 그룹화 한 값을 정렬할 수 있다
- 조회되는 컬럼 수의 개수가 같으면 일반함수와 함께 사용 할 수 있다
<ORDER BY>
작성 형식 :
SELECT 컬럼명
FROM 테이블 명
WHERE 조건식
ORDER BY 컬럼명 ( 맨 마지막에 작성 )
<UNION>
- union을 이용해 출력한 각 부서의 급여 평균
select avg(sal) from emp where deptno = 10
UNION
select avg(sal) from emp where deptno = 20
UNION
select avg(sal) from emp where deptno = 30;
- 출력 순서를 deptno 순으로 정렬하려면 데이터를 강제로 입력해야함
<GROUP BY>
1. 조회되는 컬럼의 개수가 같으면 일반함수와 사용할수 있다.
select deptno
from emp
group by deptno; --데이터 개수 :3
select avg(sal) --avg 개수 :3
from emp
group by deptno; --3개의 그룸끼리모인다
--합치면
select deptno, avg(sal)
from emp
group by deptno;
2. order by 와 함께 사용하여 그룹화 한 데이터를 정렬
SELECT DEPTNO,JOB,AVG(SAL)
FROM EMP
GRUOP BY DEPTNO,JOB
ORDER BY DEPTNO,JOB;
- 유의점 : GROUP BY절에 없는 열을 SELECT절에 포함했을 경우 각 열별 데이터 수가 달라져 출력이 불가능하다
- ORA-00937: 단일 그룹의 그룹 함수가 아닙니다
< HAVING >
특징 :
- 묶인 그룹에 대한 조건을 제시
- GROUP BY 절과 항상 함께 사용한다
- 조건식을 작성할 때 그룹함수를 사용한다
- GROUP BY, HAVING 절 보다 WHERE절이 우선 실행된다
작성 형식 :
SELECT 컬럼명
FROM 테이블 명
WHERE 조건식 (그룹함수 사용 불가)
GROUP BY 기준 컬럼명
HAVING 조건식 (그룹함수 사용)
ORDER BY 컬럼명 ( 맨 마지막에 작성 )
1. 그룹화 된 값의 조건을 설정
select deptno, avg(sal)
from emp
group by deptno
having avg(sal) > 2000;
2. WHERE 조건식에 그룹함수 사용한 경우 : ORA00934 : 그룹함수는 허가되지 않습니다. 오류 발생
SELECT DEPTNO,JOB,AVG*SAL)
FROM EMP
WHERE AVG(SAL) >= 2000
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
3. WHERE 절과 HAVING절을 모두 사용한 경우 : WHERE절이 먼저 실행 된다
SELECT DEPTNO,JOB,AVG(SAL)
FROM EMP
WHERE SAL <= 3000
GROUP BY DEPTNO, JOB
HAVING AVG(SAL >= 2000
ORDER BY DEPTNO, JOB;
반응형
'oracle' 카테고리의 다른 글
1021_DML(Data Manipulation Language, 조작어) (0) | 2022.10.24 |
---|---|
1020-Join문 (0) | 2022.10.24 |
1019_그룹 함수(다중행 함수) (0) | 2022.10.19 |
1018-Order By(데이터 정렬), 연산자 (0) | 2022.10.19 |
DQL(질의어)데이터 조회 (0) | 2022.10.19 |