Database/Oracle

[SQL]DML(SELECT문)(6) - 그룹 함수

Ma_Sand 2022. 3. 22. 22:11
반응형

그룹 함수

  : 데이터들의 합(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 함수를 넣으면 된다.

반응형