: 여러개의 행당 하나의 결과값을 반환하는 함수
- COUNT(컬럼명)
: NULL값을 포함하지 않은 전체 행의 갯수 출력
- COUNT(*)
: NULL값을 포함한 전체 행의 갯수 출력
- SUM(컬럼명)
: 해당 컬럼의 총합 => 행이 1개 나옴SELECT EMPNO, SUM(SAL) FROM EMP;
오류발생! EMPNO의 행은 12개, SUM(SAL)의 행은 1개 나와서 행의 개수가 안맞음
- AVG(컬럼명)
: 해당 컬럼의 평균SELECT AVG(COMM) FROM EMP;
AVG함수는 해당 컬럼에 NULL값이 있으면 그 행은 포함하지 않고 계산하기 때문에, 정확한 평균값이 나오지 않을수도 있다.
그러므로 NULL값을 임의로 0으로 치환하여 모든 행을 포함해서 계산하도록 해야한다.
이때 쓰는 함수가 NVLSELECT AVG(NVL(COMM,0)) FROM EMP;
이렇게 하면 COMM에 있는 NULL값을 모두 0으로 치환하므로 COMM에 있는 모든 행의 갯수로 나눠서 정확한 평균값을 구할 수 있다.
- MIN(컬럼명),MAX(컬럼명)
: 최소,최대값
=> 소요시간이 길어서 사용에 주의. 인덱스 함수를 활용하여 사용하는 것 추천
GROUP BY (컬럼명)
: 해당 컬럼값을 기준으로 먼저 모은 뒤 SELECT절에 적혀있는 그룹함수를 적용
SELECT JOB,AVG(SAL)
FROM EMP
WHERE DEPTNO=10
GROUP BY JOB
ORDER BY AVG(SAL) DESC;
JOB AVG(SAL)
--------- ----------
PRESIDENT 5000
MANAGER 2450
CLERK 1300
--SELECT DEPTNO,JOB,AVG(SAL)
--처음에 이렇게 써서 에러났음
--WHY? 부서번호를 출력하는게 아니라서!
--SELECT는 출력하는 컬럼만!!!
SELECT DEPTNO,AVG(SAL) 평균급여
FROM EMP
WHERE AVG(SAL)>=3000
GROUP BY DEPTNO;
--오류발생!
--WHY? WHERE절에는 그룹함수를 사용할 수 x AVG가 그룹함수라서 오류
--=>HAVING 절을 사용하면 됨
SELECT DEPTNO,AVG(SAL) 평균급여
FROM EMP
HAVING AVG(SAL)>=3000
GROUP BY DEPTNO;
DEPTNO 평균급여
---------- ----------
42 3200
60 3500