[ORACLE] Group by / having 절 이해하기(+Distinct)

[Oracle]

Group by 절 

Group by 절은 원하는 데이터 기준으로 그룹화 하기 위해 사용한다.

Group by 절에는 ALIAS 명을 사용할수 없다

Group by 절에는 null 값을 가진 행은 제외하고 수행한다.

 

아래 예제를 보자.

아래는 OrderDetails 테이블을 조회한 내용이다.

SELECT * FROM OrderDetails

 

OrderId 로 그룹을 해보자.

SELECT OrderId FROM OrderDetails
GROUP BY OrderId

OrderId로 그룹한 결과이다.

데이터의 결과가 기존의 17개의 row에서 6개 row로 그룹화 되었다.

 

 

DISTINCT 와 GROUP BY 절

DISTINCT는 SELECT 절에 쓰이며 주로 중복을 제거하기 위해 사용한다.

GROUP BY 는 데이터를 그룹화 하는데 주로 사용한다.

두 작업은 비슷한 형태를 가지고 있다. 둘중에 어떤것을 사용해아 할까?

쿼리에 따라 다르지만 어느것을 써도 상과없다고 본다. 편한대로 쓰자.

하지만 권유하기에는 그룹화할때에는 GROUP BY를 단순 중복제거는 DISTINCT를 추천한다.

SELECT DISTINCT OrderId FROM OrderDetails

SELECT OrderId FROM OrderDetails GROUP BY OrderId

 

HAVING 절

HAVING절은 GROUP BY 절과 같이 사용하게 된다.

HAVING절은 GROUP BY 뒤에 위치한다.

GROUP BY 로 그룹한 결과를 조건비교 할때 사용하게 된다.

 

아래는 OrderId를 그룹한 갯수를 구한것이다.

SELECT OrderId, COUNT(*) FROM OrderDetails
GROUP BY OrderId

 

여기서 그룹화한 OrderId의 갯수가 3개 이상일 경우를 구하고 싶으면

이렇게 HAVING 절에 HAVING COUNT(OrderId) >2 로 조건을 입력하면된다.

SELECT OrderId, COUNT(*) FROM OrderDetails
GROUP BY OrderId
HAVING COUNT(OrderId) > 2

 

 

댓글

Designed by JB FACTORY