위로 아래

복수행 함수 (그룹 함수)

  1. SELECT 문에서 GROUP BY절에 정의된 컬럼을 기준으로 ROW를 그룹화시켜서 복수행 함수를 적용하면, 그룹당 하나의 결과를 출력.
  2. 복수행 함수는 SELECT절, 또는 HAVING 절에 사용 (WHERE 절에 조건을 주면 오류 난다. HAVING 이용)
  3. GROUP BY절에는 복수행 함수를 적용할 컬럼을 정의해야 한다. 
  4. HAVING 절은 그룹의 값을 제한하기 위해 사용
  5. NULL값을 가진 컬럼은 계산할 때 생략

 

 


COUNT ()

조건에 만족하는 모든 행의 수를 표시

--질문 temp 테이블의 행의 수
SELECT COUNT(*)
FROM temp;

--질문 부서별 급여의 평균을 출력하는데 각 부서에 인원이 4명 이상인 경우만 출력
SELECT AVG(sal), deptno
FROM emp
GROUP BY deptno
HAVING COUNT(deptno)>=4;

--질문 temp 테이블의 사원번호의 수와 취미의 수를 출력
SELECT COUNT(emp_id) AS 사원번호, COUNT(hobby) AS 취미
FROM temp;

--질문 temp 테이블의 직급별로 인원수 세어보기
SELECT lev 직급, COUNT(lev) 인원수
FROM temp
GROUP BY lev;

 

SUM()

조건에 만족하는 모든 행의 합계

--질문 조건에 만족하는 모든 행의 합계
SELECT SUM(sal)
FROM emp;

 

 

 

AVG()

  1. 조건에 만족하는 모든 행의 평균
  2. NULL값을 가진 컬럼은 계산할 때 생략되므로, 전체 개수에 영향을 줄 수 있어서, nvl()함수를 이용해 중첩시켜주어야 한다.
--질문 조건에 만족하는 모든 행의 평균
SELECT AVG(sal)
FROM emp;

--질문 comm의 값이 NULL이면 0으로 대체하고나서 평균을 구한다
SELECT AVG(NVL(comm,0))
FROM emp;

--질문 부서별 평균 급여액
SELECT AVG(sal), deptno
FROM emp
GROUP BY deptno;

 

 

 

MAX(), MIN()

조건에 만족하는 최대값, 최소값을 보여준다.

--질문 emp 테이블에서 가장 큰 sal과 가장 작은 sal은?
SELECT MAX(sal), MIN(sal)
FROM emp;

--질문 최근 입사한 사원과 가장 오래된 사원의 입사날짜 차이
SELECT MAX(hiredate) - MIN(hiredate)
FROM emp;

--질문 직급별로 가장 빠른 사번을 출력
SELECT lev, MIN(emp_id)
FROM temp
GROUP BY lev;

 

 

STDDEV(), VARIANCE()

표준편차와 분산값

--질문 sal의 표준편차와 분산 값을 출력
SELECT STDDEV(sal), VARIANCE(sal)
FROM emp;