앞 강좌에서 우리는 group by에 대해서 살펴보셨습니다.

또한 그룹함수들도 살펴보셨습니다. 그룹함수들은 group by가 적용되어 있는 경우와 select절에 다른 일반 컬럼이 명시되어 있지 않은 경우에만 쓸 수 있었습니다.

만약 그룹화된 결과에 조건을 적용하고 싶은 경우 어떻게 해야 할까요?

 

일반적으로 우리가 데이터를 조회하려고 하는 경우 여러 가지를 생각해봐야 하겠지만 제일 먼저 조회하고 싶은 데이터가 어떤 것들인지 파악합니다. 그래야 select절에 어떤 컬럼을 명시해야 하는지 나오겠죠? 그 다음 조건이 어떤 것들이 있는지 파악합니다.

조건을 파악할때는 조건이 몇 개 인지 이 조건들은 모두 만족해야 하는지 아니면 여러 개 중 하나만 만족해도 되는지 파악합니다.그래야 and조건으로 명시해야 하는지 or조건으로 명시해야 하는지 나오겠죠?

그런데 이제부터는 한 가지를 더 생각하셔야 합니다.

group by로 묶기 전에 적용할 조건인지 group by로 묶은 후에 적용할 조건인지를 생각하셔야 합니다.

보통 group by로 묶고 난 다음에 주어야 하는 조건은 그룹함수를 써서 조건을 적용해야 하는 경우입니다. 이런 경우 앞에서 보셨던 것 처럼 where에 명시할 수 없으므로 sql에서는 다른 절을 제공해 줍니다. 이게 바로 having절입니다. having절은 그룹화된 결과에 조건을 적용하고 싶은 경우 사용하실 수 있는 select문에 포함된 절입니다.

 

다음과 같은 예제를 살펴보도록 하겠습니다.

급여가 1500이상인 데이터들의 부서별 인원수를 나타냅니다. 단, 인원수가 2명 이하인 데이터는 제외합니다.

 

 

위의 예제를 보시면 조건이 몇 개가 나오나요?

네 조건은 급여가 1500이상인 데이터라는 것과 인원수가 2명 이하인 데이터라는 조건이 나오고 있습니다.

그런데 급여가 1500이상이라는 조건은 그룹하기 전에 주셔야 하는 조건이 되겠죠? 급여가 1500이상인 데이터를 가지고 부서별 인원수를 나타내라고 했기 때문에 이 조건은 그룹화 되기 전에 where에 주셔야 하는 조건이 될 것입니다.

인원수가 2명 이하이라는 것은 그룹화된 상태에서 구해진 인원수에 조건을 적용해야 합니다. 이때 인원수는 count함수를 써서 적용해야 하고 조건에도 count함수를 써서 판단해야 합니다. 이렇게 그룹화된 후에 그룹함수를 써서 조건을 적용해야 하는 경우는 다음과 같이 having절에 조건을 명시합니다.

select deptno,count(empno)
from emp
where sal>=1500
group by deptno
having count(empno)>2;

 

 

위의 SQL문을 실행하면 다음과 같은 결과가 조회됩니다.

 

 

 

 

+ Recent posts