그룹함수
- 여러 행 또는 테이블 전체에 대해 함수가 적용되어 하나의 결과를 반환하는 함수
- NULL값은 제외하고 계산함.
COUNT
- 테이블에서 조건을 만족하는 row의 개수를 반환하는 함수(NULL값 제외)
//문법
//* : 컬럼에 상관 없이 모든 ROW 선택
COUNT(컬럼명||*)
//예시
SELECT COUNT(ename) FROM emp;
SELECT COUNT(*) FROM emp ;
SUM
- 해당 컬럼 값들의 총합을 구하는 함수
//문법
SUM(컬럼명)
//예시
SELECT SUM(sal) FROM emp;
AVG
- 해당 컬럼 값들의 평균을 구하는 함수
- NULL 값을 포함해서 평균을 구하려면 NVL( )함수를 함께 쓴다.
//문법
AVG(칼럼명)
//예시
SELECT AVG(sal) FROM emp;
// NULL값도 함께 계산하는 경우
SELECT AVG( NVL( comm , 0 ) ) FROM emp;
MAX
- 해당 컬럼 값들 중 최대값을 구하는 함수
//문법
MAX(칼럼명)
//예시
SELECT MAX(sal) FROM emp;
MIN
- 해당 컬럼 값들 중 최소값을 구하는 함수
//문법
MIN(컬럼명)
//예시
SELECT MIN(sal) FROM emp;
GROUP BY절
- 그룹함수와 단순 컬럼은 SELECT절에서 동시 사용이 불가능하다.
- GROUP BY절을 사용하여 단순 컬럼을 그룹으로 묶으면 동시 사용이 가능해진다.
- GROUP BY 절 작정시 유의 사항
(1) SELECT절 뒤에 사용할 수 있는 컬럼은 GROUP BY 뒤에 기술된 컬럼이거나 그룹함수가 적용된 컬럼만 사용가능
(2) WHERE절을 사용하여 행을 그룹으로 그룹핑 하기 전에 제외 시킬 수 있다.
(3)그룹으로 묶은 후 행을 제외 시키려면 HAVING절을 사용한다.
(4)GROUP BY절 뒤에는 컬럼 별칭(alias) 및 컬럼 순서 위치 값을 사용할 수 없다.
(5)WHERE절에는 그룹함수를 사용할 수 없다.
//예시1
//급여가 1000 이상인 사원들의 부서별 평균 급여의 반올림 값을 부서번호로
//내림차순 정렬해서 출력해 보세요.
SELECT deptno, ROUND( AVG(sal) )
FROM emp
WHERE sal >= 1000
GROUP BY deptno
ORDER BY deptno DESC ;
//예시2
//급여가 2000 이상인 사원들의 부서별 평균 급여의 반올림 값을
//평균 급여의 반올림 값으로 오름차순 정렬해서 출력해 보세요.
SELECT deptno, ROUND( AVG(sal) )
FROM emp
WHERE sal >= 2000
GROUP BY deptno
ORDER BY ROUND( AVG(sal) ) ASC ;
//예시3
//각 부서별 같은 업무(job)를 하는 사람의 인원수를 구해서
//부서번호, 업무(job), 인원수를 부서번호에 대해서 오름차순 정렬해서
//출력해 보세요.
SELECT deptno, job, count(*)
FROM emp
GROUP BY deptno, job
ORDER BY deptno ASC
HAVING 절
- GROUP BY절에 의해서 생성된 결과 중에서 조건과 일치하는 데이터를 추출할때 사용된다.
//예시3
//급여가 1000 이상인 사원들의 부서별 평균 급여를 출력해보세요
//단, 부서별 평균 급여가 2000 이상인 부서만 출력하세요
SELECT deptno, AVG(sal)
FROM emp
WHERE sal >= 1000
GROUP BY deptno
HAVING AVG(sal) >= 2000 ;
'ORACLE' 카테고리의 다른 글
조인 (0) | 2019.11.16 |
---|---|
View(뷰) / Sequence(시퀀스) / SYNONYM(동의어) (0) | 2019.11.15 |
SQL함수 / 단일행 함수 (0) | 2019.11.15 |
DML / TCL (0) | 2019.11.15 |
DDL 명령어 / TABLE 객체 / ROWID / ROWNUM (0) | 2019.11.15 |