SQL
GROUP BY 및 HAVING 그리고 집계 함수
Jundol
2016. 5. 19. 16:44
1. GROUP BY
말 그대로 그룹으로 묶어주는 역할을 한다.
한 테이블에서 사용자(userid)가 구매한 물품의 개수(amount)를 보려면 각각의 행이 출력된다.
하지만 해당 사용자가 총 구매한 물품의 개수로 묶어서 출력해 보이고 싶다면 sum 함수를 사용하면 된다.
1 | SELECT userid, SUM(amount) FROM buyTbl GROUP BY userid | cs |
이렇게 되면 열 이름 없음으로 나오는데 이럴때는 별칭(alias)를 사용해서 결과를 보기 편하도록 한다.
1 | SELECT userid AS [사용자 아이디], SUM(amount) AS [총 구매 개수] FROM buyTbl GROUP BY userid | cs |
구매액의 총 합을 출력해 본다. 구매액은 가격 * 개수이므로 총 합은 SUM()을 사용한다.
1 | SELECT userid AS [사용자 아이디], SUM(amount * price) AS [총 구매 액] FROM buyTbl GROUP BY userid | cs |
2. 집계함수
함수명 |
설명 |
AVG() |
평균 |
MIN() |
최소값 |
MAX() |
최대값 |
COUNT() |
행의 개수 |
COUNT_BIG() |
행의 개수. 단, 결과값이 bigint형 |
STDEV() |
표준편차 |
3. HAVING
위의 구매액의 총 합을 구하는 쿼리문에서 총 구매액이 1000 이상인 사용자만 출력하려고 한다.
그러면 보통 지금까지 학습했을 경우 WHERE절을 이용해서 출력하려고 할 것이다.
1 2 3 4 | SELECT userid as [사용자], SUM(price * amount) as [총 구매액] FROM buyTbl WHERE SUM(price * amount) > 1000 GROUP BY userid | cs |
위와같이 오류가 발생한다.
이럴 때 사용하는게 HAVING 이다. HAVING은 WHERE와 비슷한 개념으로 조건을 제한하는 것으로 집계 함수에 대해서 조건을 거는 것이라고 생각하면 된다. 그리고 HAVING 절은 꼭 GROUP BY 절 다음에 나와야 한다!!
1 2 3 4 | SELECT userid as [사용자], SUM(price * amount) as [총 구매액] FROM buyTbl GROUP BY userid HAVING SUM(price*amount) > 1000 | cs |