본문 바로가기
3-2 학기/Database

[데이터베이스] Ch5 SQL II

by bona.com 2024. 10. 15.

5-1 Aggregate Functions

✅집계함수

데이터베이스 시스템은 다섯 개의 집계함수를 지원한다.

  • avg: average value
  • min: minimum value
  • max: maximum value
  • sum: sum of values
  • count: number of values

✅Group by 

전체 테이블을 특정 속성 값으로 터플을 분류하고, 나누어진 각 그룹에 대하여 집계 함수를 적용하고자 하는 요구가 있으며, 이러한 역할을 하는 것이 "group by"절이다.

 

group by절을 사용할 때 주의해야 할 사항이 있다. 

바로, group by절에 나온 속성집계함수만이 select 절에 나올 수 있다.

아래의 예시를 통해 자세히 알아보자.

/* 틀린 예시 */
Select deptName, pID, avg(salary)
from professor
group by deptName;

 

위의 예시가 틀린 이유는 그룹당 deptName과 집계함수 값이 생성되는 것에 반하여 pID 값은 그룹 수보다 많이 존재하게 되고, 이 경우 보여주어야 하는 pID 값을 선정할 수 없기 때문이다.

 

Select avg(salary)
from professor
group by deptName;

 

추가로, group by 절에 나오는 속성은 select 절에 나오는 것이 좋으나 반드시 나와야 하는 것은 아니다.

다만 위의 예제의 경우 각 그룹에 대한 salary 평균값만 사용자에게 보이게 되며, 어떤 그룹에 대한 평균값인지는 사용자가 알 수 없다.

 

✅Having

having절은 group by절 결과로 생성된 그룹에 대하여 임의 조건을 명시하는데 사용된다.

 

Select deptName, avg(salary)
from professor
group by deptName
having avg(salary) > 6900;

 

위의 예제를 통해 알아보자면, professor 테이블을 deptName을 기준으로 그룹을 만들고, 각 그룹에 대하여 avg(salary) > 6900 조건을 만족하는 그룹에 한하여 select절이 deptName과 salary의 평균 값을 보인다.

 

* where절과 헷갈리면 안된다.

where절 조건은 각 터플에 적용하여 조건을 만족하는 터플이 다음 단계로 이관되는 것이고,

having절 조건은 각 그룹에 적용하여 이를 만족하는 그룹이 다음 단계로 이관되는 것이다.

만약, 두 개의 절이 동시에 select 문장에 존재한다면, where절이 먼저 적용되고, 그 후에 생성된 그룹에 대하여 having절 조건이 적용된다.