컴퓨터 공학 분야 별 지식/database

[DB, SQL 문법 정리]Aggregate Functions<집계 함수>(avg, min, max, sum, count) and Group By

N돌핀 2022. 4. 11. 00:05

이번 시간에는 worker라는 가상의 table이 있다고 가정하고 aggregate Function과 group by에 대해 설명하겠습니다!

Aggregate Functions

  • 모으는 함수
  • column들의 값을 종합하여 한 개의 값을 반환하는 함수들

예시: worker table 속성 (밑줄이 PK 속성)

속성 workerId name company salary
속성 뜻 직원 고유 번호(PK) 직원이름 회사이름 연봉

avg, min, max, sum

  • 해당 속성의 평균, 최소, 최대, 총합 값 return
  • 밑의 avg랑 같은 형식으로 사용하면 된다
select avg(salary)
from worker
where company = 'Apple';

-- worker테이블의 Apple에 다니는 사람들의 연봉의 평균

count

  • 해당 속성의 총 개수를 return
select count(workerId)
from worker
where company = 'Apple';

-- worker테이블의 Apple에 다니는 사람들의 수(pk ID의 개수 이므로)

 

 


Group By

  • 해당하는 속성으로 묶음(해당 속성이 중복 될 시 중복을 없애고 하나로 합쳐짐)
  • 해당 속성으로 묶는 과정에서 중복되는 것은 합쳐져야 하므로 해당 속성을 제외한 나머지 속성들은 aggregation function을 이용해서 값을 하나로 합치는 게 아니면 select할 수 없음 (무결성 해침)
  • 풀어서 설명하면 worker 테이블에서 회사 이름을 기준으로 합칠 때, 한 회사를 다니는 사람이 여러명일 것이므로 월급(salary)이 중복되고 이는 하나로 나타내져야 select할 수 있으므로 avg를 이용해 평균값을 내야함
select company, avg(salary) as company_salary
from worker
group by company;

-- 회사를 기준으로 worker테이블을 그룹짓고 각 회사별 salary의 평균값을 
-- company_salary라는 이름으로 변경하여 리턴
-- EX) 애플을 다니는 사원이 두명 이상일 때 apple이라는 (company)회사 이름과 
-- 사원들의 월급 평균값(company_salary)을 가지는 row 생김

Having 절

  • where절과 비슷하지만 그룹에 대한 조건
select company, avg(salary) as company_salary
from worker
group by company
having avg(salary) > 100

-- 회사를 기준으로 worker테이블을 그룹짓고 각 회사별 salary의 평균값을 가지는 테이블을 리턴
-- having절에 의해 평균 월급이 100 이상인 그룹만 리턴