본문 바로가기

Library/Database

GROUP BY and HAVING

group by 절은 어떤 역할을 하는가? from, where 절과 무엇이 다른가? 먼저, SQL 질의는 하나의 select 절과 결과 테이블의 cross-product를 표시하는 from 절을 가져야 하며, 선택적인 where 절은 from 절에서 언급된 테이블에 대한 선택조건을 표시한다. group by 절은, 릴레이션의 행들에 대해서, 각 그룹별로 집단 연산을 적용하고 싶은 경우에 사용한다. having 절은 이때 선택되는 group에 대해서 제한조건을 명시하게 된다.

집단 함수(Aggregate Operator)는, 여러 원소에 대해서 하나의 값만 결과로 돌려주는 함수를 의미한다. 예를 들어 max, min, sum 따위의 함수가 있다.

group by 절에서, group이란 정확하게 무엇을 의미하는가? from - where 절은 테이블에서 각각의 선택되는 조건에 대해서 모든 행을 검사하게 된다. 그룹화는 이 릴레이션의 행들에 대한 그룹에 대해서 질의를 하려고 할 때 사용된다. group by가 실제로 적용되는 순서는 다음과 같다.

1. from 절에서 나타난 테이블의 cross-product를 구성한다.
2. where 절에 나타난 조건문을 사용하여 필요없는 행들을 제거한다.
3. select, group by, having에서 언급된 열만 필요하다. 즉, 이 단계는 필요없는 열을 제거하는 단계이다.
4. 그룹을 식별하기 위해 group by 절에 따라 테이블에 나타난 group 조건식을 적용한다.
5. having 절에 나타난 group 조건식을 적용한다.
6. 남아있는 각 그룹마다 하나의 답행을 만든다. 각 그룹에 해당하는 행은 그룹화된 열들의 부분집합으로 구성되는데, 여기에 집단연산자를 적용하여 하나 이상의 열들이 생성된다.