하나 이상의 행을 그룹으로 묶어 연산하여 총합, 평균 등의 하나의 결과 행으로 반환하는 함수
합계
SELECT SUM(SALARY) FROM EMPLOYEE;
-- 부서 코드가 'D9'인 직원들의 급여 합
SELECT SUM(SALARY) FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';
평균
SELECT ROUND( AVG(SALARY) ) FROM EMPLOYEE;
최소값
최대값
-> 타입 제한 없음 (숫자 : 대/소, 날짜: 과거/미래, 문자열 : 문자 순서)
-- EMPLOYEE 테이블에서 가장 낮은 급여
-- 가장 빠른 입사일
-- 알파벳 순서가 가장 빠른 이메일
SELECT MIN(SALARY), MIN(HIRE_DATE), MIN(EMAIL)
FROM EMPLOYEE;
-- 그룹 함수는 여러 개를 동시 작성 가능한데
-- 이때 결과는 실제 테이블 한 행이 아니고
-- 각 그룹 함수 별 독립된 결과
-- 사번이 200이 아닌 사람들 중에서
-- EMPLOYEE 테이블에서 가장 높은 급여,
-- 가장 늦은 입사일,
-- 알파벳 순서가 가장 늦은 이메일
/*3*/SELECT MAX(SALARY), MAX(HIRE_DATE), MAX(EMAIL)
/*1*/FROM EMPLOYEE
/*2*/WHERE EMP_ID != 200;
행의 개수를 헤아려서 리턴
: 중복을 제거한 행 개수를 헤아려서 리턴
: NULL을 포함한 전체 행 개수를 리턴
: NULL을 제외한 실제 값이 기록된 행 개수를 리턴함
-- EMPLOYEE 테이블 전체 행의 개수 == 전체 직원 수
SELECT COUNT(*) FROM EMPLOYEE;
-- DEPT_CODE가 NULL이 아닌 행의 개수
SELECT COUNT(*) FROM EMPLOYEE
WHERE DEPT_CODE IS NOT NULL;
-- COUNT(컬럼명) : NULL을 제외한 실제 값이 기록된 행 개수를 리턴함
SELECT COUNT(DEPT_CODE) FROM EMPLOYEE;
-- EMPLOYEE 테이블에 있는 부서 개수
SELECT COUNT(DISTINCT DEPT_CODE) FROM EMPLOYEE;
-- EMPLOYEE 테이블의 남자 직원 수 조회
SELECT COUNT(*) FROM EMPLOYEE
WHERE SUBSTR(EMP_NO, 8, 1) = '1';
SELECT COUNT(
CASE
WHEN SUBSTR(EMP_NO, 8, 1) = '1' THEN '남자'
END) 남자
FROM EMPLOYEE;
SELECT SUM(DECODE(SUBSTR(EMP_NO, 8, 1), '1', 1)) FROM EMPLOYEE;