그룹 함수
: 데이터들의 합(SUM), 평균(AVG)
- n개의 값들을 읽어 하나의 값을 반환한다.
→ 하나의 그룹별로 함수 실행 결과를 반환한다.
(1) 합(SUM)
: SUM(숫자 타입 컬럼명) - 해당 컬럼값들의 총 합계를 반환한다.
- 부서코드가 'D6'인 직원들의 총 급여 합계를 반환하기
SELECT SUM(SALARY)
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6';
⇒ 총 급여 = 10100000
급여의 합계이므로 SALARY 컬럼을 SUM 함수에 넣는다. 부서코드는 DEPT_CODE이며, D6은 문자열이므로 작은따옴표로 감싸서 DEPT_CODE와 같음을 작성한다.
(2) 평균(AVG)
: AVG(숫자 타입 컬럼명) - 해당 컬럼값들의 평균을 반환한다.
- 전 직원의 평균 급여를 반환하기
SELECT FLOOR(AVG(SALARY))
FROM EMPLOYEE;
⇒ 평균 급여 = 3047662
일단 전 직원에 대한 것이므로 조건식은 따로 적을 게 없다. 평균 급여는 'AVG(SALARY)'로 했을 때 소수점 아래 수들도 출력되므로 깔끔하게 보기 위해 FLOOR 함수로 소수점을 날려버린다.
(3) 최소값(MIN)
: MIN(모든 타입) - 해당 컬럼값 중 가장 작은 값을 반환한다.
- 전체 직원들 중 최저급여인 직원의 이름과 이메일, 입사일 조회하기
SELECT MIN(SALARY), MIN(EMP_NAME), MIN(EMAIL), MIN(HIRE_DATE)
FROM EMPLOYEE;
최저급여인 직원을 찾아야 하므로 우선 급여 컬럼인 SALARY 컬럼을 MIN 함수에 넣는다. 그 다음 직원 이름과 이메일, 입사일도 MIN 함수에 넣어야 한다. 만약 이 세 컬럼을 MIN 함수에 넣지 않으면 'not a single-group group function' 에러가 발생한다.
(4) 최대값(max)
: MAX(모든 타입) - 해당 컬럼값 중 가장 큰 값을 반환한다.
- 전체 직원들 중 최고급여인 직원의 이름과 이메일, 입사일 조회하기
SELECT MAX(SALARY), MAX(EMP_NAME), MAX(EMAIL), MAX(HIRE_DATE)
FROM EMPLOYEE;
(4)와 같이 MIN 함수를 MAX 함수로 바꾸면 SELECT에 있는 컬럼에서 최대값들이 출력된다.
(5) COUNT
: COUNT(*) - 조회 결과에 해당하는 모든 행의 개수를 세어 반환한다.
COUNT(컬럼명) - 제시한 해당 컬럼값이 NULL이 아닌 것만 행의 개수로 세어 반환한다.
COUNT(DISTINCT 컬럼명) - 제시한 해당 컬럼값에 중복값이 있을 경우 하나로만 개수를 세어 반환한다.
- 남직원 수 조회하기
SELECT COUNT(*)
FROM EMPLOYEE
WHERE SUBSTR(EMP_NO, 8, 1) = 1;
전체 직원 중 "모든" 남직원의 수를 조회하는 것이므로 모든 값을 꺼내는 '*'를 COUNT 함수에 넣는다. 그리고 남자를 조건식에 작성해야 하므로 성별을 추출하기 위해 SUBSTR 함수를 사용하면 된다.
- 직원들이 현재 속해있는 부서의 개수 조회하기
SELECT COUNT(DISTINCT DEPT_CODE)
FROM EMPLOYEE;
직원들이 속해있는 부서에 중복값이 있으므로 중복값을 제외하고 값을 반환하는 DISTINCT 함수를 사용한다. 그리고 부서의 개수를 뽑아야 하므로 COUNT 함수에 DISTINCT 함수를 넣으면 된다.