📚 시리즈/- 초보자도 준비하는 SQL 코딩 테스트 2021. 2. 25.
목차
지난 시간에 우리는 SELECT의 기본적인 사용 방법과 SELECT와 함꼐 쓰일 수 있는 WHERE, ORDER BY에 대해서 배웠다. 이번 시간에는 우리가 원하는 데로 데이터를 묶어주는 GROUP BY에 대해서 알아보자.
집계 함수집계 함수는 특정 값들을 말 그대로 집계 할 때 사용된다. 집계에는 여러 가지 종류가 존재한다. 그 중에 대표적인 4가지를 봐보자.
그럼 우리는 다음과 같은 쿼리를 처리할 수 있다. buytb1 에서 총 얼만큼 주문되었는지 총 주문량을 출력하라
usertb1 에서 사용자들의 평균 키를 출력하라
이런 집계 함수는 사용될 수 있는 쿼리문 영역이 매우 다양하며, 자주 사용될 수 있다.
혼자 생각해보자!만약 usertb1 에서 키가 가장 큰 사용자와 키가 가장 작은 사용자의 이름을 출력하라! 라고 한다면 어떤 쿼리문이 나올까? 분명 여러분은 할 수 있을 것이라고 생각한다.
GROUP BY
우선 GROUP BY에 대해서 알기 전에 어디서 사용되는지 예제를 먼저 접하고 이해해보자.
위에 나온 문제들은 모두 GROUP BY 절이 사용되어야 출력할 수 있다. 그럼 공통점을 한 번 찾아보자.
이 둘을 종합해서 본다면, GROUP BY는 집계 함수를 통해서 xx 별로 그들 만의 그룹을 만들어주는 함수라고 정의할 수 있다. 그럼 각각의 문제에 대해서 쿼리를 진행할 수 있다.
GROUP BY 함수를 좀 더 깊게 사용해보자.buytb1 에서 사용자들의 총 구매 금액을 출력하라.우선 우리는 사용자 별로 구매 금액을 따로 나눠야 하니 사용자를 그룹으로 묶어줘야 한다. 그리고 각각의 총 구매 금액을 계산해보자.
을 수행하면 각각 사용자의 물품별 구매 금액이 나온다. 우리는 이 물품별 구매 금액을 모두 합산해야 하므로 sum을 이용해 집계할 수 있다.
오 근데 에러가 난다.
그럼 우리가 원하는 결과가 아주 아름답게 잘 나오게 된다. 혼자 생각해보자!만약 buytb1에서 사용자들이 평균적으로 몇 개의 물건을 샀는지 출력하라고 하면 어떻게 해야할까?
HAVING그럼 내친김에 이것도 풀어보자. buytb1 에서 사용자들의 총 구매 금액이 1500 이상인 사용자를 출력하라.위에서 우리는 총 구매 금액을 구한적이 있다.
그럼 이제 1500 이상인 사용자를 구하는 것은 아주 쉽다.
엥? 안된다.
논리를 확장시켜보자. 집계 함수에서 조건을 줄 때집계 함수에서 조건을 줄 때는 WHERE 대신 HAVING을 사용한다.
이제 HAVING이 왜 필요한지 알게 되었다. HAVING절 사용 방법
여기서 HAVING은 where 조건식과 동일한 형태의 조건식이 들어갈 수 있다.
이제 우리는 앞서 봤던 문제를 해결할 수 있게 되었다.
|