이번 시간에는 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 이상인 그룹만 리턴
'컴퓨터 공학 분야 별 지식 > database' 카테고리의 다른 글
[DB, ERD]ERDCloud 사용법 (0) | 2022.04.14 |
---|---|
[DB, SQL 문법 정리] SQL Operations<연산자>(String, between, union, intersect, except) (0) | 2022.04.08 |
[DB, SQL 문법 정리] Query Structure<질의 구조>(Select, From, Where), Rename(as) 연산자 (0) | 2022.04.07 |
[DB, SQL 문법 정리] 도메인 타입, DDL, DML (0) | 2022.04.05 |