지난번엔 다양한 단일 함수에대해 정리해 보았습니다.
이번글은 그룹 함수에 대해 정리해보고자 합니다.
- SUM
- COUNT
- MAX
- MIN
- AVG
해당 글에서는 emp 테이블을 사용합니다.
1. SUM
SUM 함수는 데이터의 합을 구하는 함수입니다.
SELECT sum(sal)
FROM emp;
또한 지난번에 사원의 연봉을 구할 때, comm 추가수당에 null 값으로 인해 NVL 함수를 안쓰면 추가수당이 있는 사원의 값만 나오게 되었습니다.
그러나 그것은 단일 함수였습니다. 즉, 각 행에 대하여 연산을 진행했던 것이죠.
sum은 그룹 함수이기 때문에 해당 컬럼에 null값이 있어도 연산 결과가 나옵니다.
SELECT sum(comm)
FROM emp;
그리고 sum 함수에도 DISTINCT를 적용할 수 있습니다.
SELECT sum(DISTINCT sal), sum(ALL sal), sum(sal)
FROM emp;
DISTINCT는 중복값은 제외시키죠. 급여가 같은 사원이 좀 있었나봅니다. 결과가 다르네요.
그런데, sum 함수를 쓰면서 중복값을 제외하고 연산하는 경우가 있을까 싶네요.
뭐, 아무튼 이런것도 있다 정도로만 보시면 될 것 같습니다.
2. COUNT
count 함수는 데이터의 개수를 출력하는 데 사용하는 함수입니다.
SELECT count(sal), count(comm), count(*)
FROM emp;
각 컬럼의 데이터 갯수가 잘 나왔네요. comm은 세일즈맨 사원에게만 있었죠. 그리고 count(*)은 모든 행의 갯수를 뜻하죠.
3. MAX, MIN
입력 데이터 중 최대, 최솟값을 구하는 함수 입니다.
SELECT max(sal), min(sal)
FROM emp;
이렇게도 사용할 수 있겟죠.
SELECT max(sal), min(sal)
FROM emp
WHERE deptno = 20;
부서 번호가 20인 사원들 중, 최고 급여와 최소 급여를 출력해주는 쿼리입니다.
또한 날짜 데이터에도 적용이 가능합니다.
날짜 데이터가 클 수록 최근이란 뜻입니다.
SELECT max(hiredate), min(hiredate)
FROM emp
WHERE deptno = 20;
4. AVG
AVG 함수는 입력 데이터의 평균 값을 구하는 함수 입니다.
SELECT avg(sal), avg(comm), avg(NVL(comm, 0))
FROM emp;
어라? 같은 평균 구하는 함수를 썼는데,
comm 컬럼에 대해서는 두 방식의 결과가 다르네요.
이유는 null 값 때문입니다.
즉, count(*) 를 제외한 나머지 모든 그룹 함수는 null 값을 제외한 연산을 수행합니다.
그래서 avg(comm)은 4명의 데이터 값만 조회해서 덧샘을 한 후 4로 나누어 평균을 냈죠.
avg(NVL(comm, 0)) 은 null 값을 모두 0으로 계산해서 총 14명의 값을 연산 후 14로 나누게 됩니다.
여기까지 그룹 함수에 대한 정리 글이였습니다.