group function

그룹 함수 : 그룹으로 요약하기

  • 여러 행에 함수가 적용되어 하나의 결과를 나타내는 함수
  • 집계 함수라고도 함
  • GROUP BY : 기준 열에 대해 같은 데이터 값끼리 그룹을 묶고, 묶은 행의 집합에 대해 그룹 함수 연산이 필요한 경우, GROUP BY를 이용하여 처리
  • HAVING : 묶은 그룹에 대해 조건이 필요하다면 HAVING 절을 이용

1. 그룹 함수의 종류와 사용법

  • 굵게 표시된 부분은 필수 기본 문법

SELECT          그룹 함수(열 이름)
FROM              테이블 이름
[WHERE         조건식]
[ORDER BY   열 이름];

  • 그룹 함수의 종류
함수 설명 null처리
COUNT 행 개수를 셈 COUNT(salary) (*)의 경우 null 값도 개수로 셈
SUM 합계 SUM(salary) null 값을 제외하고 연산
AVG 평균 AVG(salary) null 값을 제외하고 연산
MAX 최댓값 MAX(salary) null 값을 제외하고 연산
MIN 최솟값 MIN(salary) null 값을 제외하고 연산
STDDEV 표준편차 STDDEV(salary) null 값을 제외하고 연산
VARIANCE 분산 VARIANCE(salary) null 값을 제외하고 연산

2. COUNT 함수

  • COUNT는 지정한 열의 행 개수를 세는 함수

    COUNT(열 이름)

(1) employees 테이블에서 salary 열의 행 수가 몇 개인지 세어서 출력하세요.
SELECT COUNT(salary) salary행수
FROM employees;

3. SUM, AVG 함수

  • SUM : 열의 합계
  • AVG : 열의 평균

    SUM(열 이름) / AVG(열 이름)

(1) employees 테이블에서 salary의 합계와 평균을 구해 보세요. 또한 AVG 함수를 사용하지 말고 평균을 구해보세요.

SELECT SUM(salary) 합계, AVG(salary) 평균, SUM(salary)/COUNT(salary) 계산된평균
FROM employees;

  • 실무 활용 팁 : AVG 합수는 null 값을 제외하고 연산함, null 값을 포함해서 평균을 계산해야 한다면 AVG(NVL(salary, o)) 형태로 계산해야 함

4. MAX, MIN 함수

  • 모든 데이터 타입에 적용 가능
  • 문자열의 경우 : 알파벳순, 날짜순 등으로 연산하여 결과를 출력함

MAX(열 이름) / MIN(열 이름)

(1) employees 테이블에서 salary의 최댓값과 최솟값, first_name의 최댓값과 최소값을 출력해 보세요.

SELECT MAX(salary) 최댓값, MIN(salary) 최솟값, MAX(first_name) 최댓값문자, MIN(first_name) 최솟값문자
FROM employees;

GROUP BY : 그룹으로 묶기

  • SELECT 절에 열 이름과 그룹 함수를 함께 기술했다면 GROUP BY 절을 반드시 사용해야 함
  • 그룹화는 열 이름 순서대로 수행됨
  • WHERE 절을 사용하면 GROUP BY 보다 먼저 적용됨
  • SELECT 절에 그룹 함수를 사용하지 않고 GROUP BY 절만으로도 사용할 수 있음

SELECT           기준 열, 그룹 함수(열 이름)
FROM              테이블 이름
[WHERE          조건식]
GROUP BY     열 이름
[ORDER BY    열 이름]

(1) employees 테이블에서 employee_id가 10 이상인 직원에 대해 job_id별로 그룹화하여 job_id별 총 급여와 job_id별 평균 급여를 구하고, job_id별 총 급여를 기준으로 내림차순 정렬하세요.

SELECT         jobid 직무, SUM(salary) 직무별총급여, AVG(salary) 직무별평균급여
FROM            employees
WHERE         employee_id >= 10
GROUP BY   job_id
ORDER BY   직무별
총급여 DESC, 직무별_평균급여;

  • 그룹에 대한 그룹이 필요한 경우

    GROUP BY 대그룹, 중그룹, 소그룹

SELECT          jobid job_id대그룹,
                        managerid manager_id중그룹,
                        SUM(salary) 그룹핑총급여,
                        AVG(salary) 그룹핑
평균급여,
FROM             employees
WHERE          employeeid >= 10
GROUP BY    job_id, manager_id
ORDER BY    그룹핑
총급여 DESC, 그룹핑_평균급여;

HAVING : 연산된 그룹 함수 결과에 조건 적용하기

  • HAVING 절은 그룹화된 값에 조건식을 적용할 때 사용(WHERE 절은 사용 불가)

SELECT           열 이름, 그룹 함수(열 이름)
FROM              테이블 이름
[WHERE          조건식]
GROUP BY     열 이름
[HAVING         조건절]
[ORDER BY    열 이름];

(1) employees 테이블에서 employees_id가 10 이상인 직원에 대해 job_id별로 그룹화하여 job_id별 총 급여와 job_id별 평균 급여를 구하되, job_id별 총 급여가 30000보다 큰 값만 출력하세요. 출력 결과는 job_id별 총 급여를 기준으로 내림차순 정렬하세요.

SELECT            jobid 직무, SUM(salary) 직무별총급여, AVG(salary) 직무별평균급여
FROM               employees
WHERE            employee_id >= 10
GROUP BY      job_id
HAVING           SUM(salary) > 30000
ORDER BY      직무별
총급여 DESC, 직무별_평균급여;

자료출처: 모두의 SQL

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments