Group by
집계 키를 정의 하지 않아도 집계연산을 할수있지만, 보통 집계연산에서는 집계 키를 정의 하는것이 상식이다.
집계 키를 정의하기 위해서는 select 절의 마지막에 Group by를 쓰고 연산식을 지정하면 된다.
하나 이상이면 “,” 을 이용하여 구분할수 있다.
select customerID from northwind..orders group by customerID
집계키만 select가 가능하다.
Distinct 연산
동일한 기능을 하는것으로 Distinct 연산이 있다
Distinct 와 Group by 연산이 해깔리기 쉬운데.
Distinct은 정말 유니크 한 키값만 뽑아내기 위해 쓰이고,
Group by는 집합연산으로 집합키 컬럼을 기준으로 집합연산을 위해서 사용되는 것이다.
따라서 Distinct는 유니크한 키 값을 뽑아내는 이외의 집합 연산을 불가능하다.
select distinct customerID, EmployeeID from northwind..orders
은 되지만 집합 연산은 할수 없다.
select distinct customerID, EmployeeID, Count(*) from northwind..orders
Group by All
집계키를 정의하는 Group by 절에는 ALL 이라는 옵션을 줄수 있다.
ALL 옵션이 사용되려면 Group by 절에 Where 조건이 포함되어야만 한다.
Where 조건이 없다면 ALL 이 있으나 없으나 결과는 달라지지 않는다.
“상품 종류별로 개수를 뽑는데, 상품들의 재 주문 비율이 30 이상인 것만을 대상으로 하라”
select CatogoryID, Count(*) from Northwind..products where ReorderLevel >= 30 group by CategoryId
하지만 보고서를 뽑을때 전체를 그룹핑하면서 재 주문 비율이 30미만인것은 모두 0 혹은 null 로 처리해야 할때가 있다.
리스트 전체가 다나오는데 값을 처리하는 대상이 되는것은 특정조건 이상인 것만이 되는것이다.
이런경우 사용되는것이다 ALL 옵션이다.
ALL 옵션은 검색조건에 포함되지 않는 데이터들도 집계하는데 그 값은 NULL로 처리된다.
다만 Count 함수의 경우에는 처리값이 하나도 없다면 0으로 반환된다.
select CatogoryID, Count(*) from Northwind..products where ReorderLevel >= 30 group by ALL CategoryId
참고
상기의 내용은 손호성님의 “SQL Server 2005 완벽가이드 책”을 보며 필기한 내용입니다.
No Comments