일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- DispatcherServlet
- Component
- layout #thymeleaf #화면분할
- spring
- git #gitlab #github
- Bean
- 1
- zepettoworld.com
- 오토와이어드
- autowired
- 스프링 부트
- 스프링
- Today
- Total
기록과 정리
데이터 요약 GROUP BY & HAVING 본문
이 글은 '[백문이불여일타] 데이터 분석을 위한 중급 SQL' 강의를 참고하였습니다.
[백문이불여일타] 데이터 분석을 위한 기초 SQL - 인프런 | 학습 페이지
지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....
www.inflearn.com
GROUP BY
공급자별로 데이터를 보고 싶고, 평균 가격을 가져온다고 하자.
GROUP BY 뒤에는 데이터를 묶고 싶은 요소(그룹의 기준) 및 ID , SELECT에는 집계함수를 사용했다.
SELECT 묶을 요소
, 집계함수(컬럼)
FROM 테이블
GROUP BY 묶을 요소
여기서 그룹의 기준을 추가하고 싶다면 묶을 요소 뒤에 하나를 더 추가하여 쿼리를 만들어보자.
공급자별로 묶고 또 그중에서 카테고리별로 묶어 평균 가격을 가져온다고 하자.
SELECT 묶을 요소
, 묶을 요소2
, 집계함수(컬럼)
FROM 테이블
GROUP BY 묶을 요소, 묶을 요소2
여러가지 기준으로도 그룹을 묶어 조회가 가능하다. MySQL의 경우, GROUP BY 뒤에 1이나 2에 숫자를 쓸수 있다. 첫번째 컬럼, 두번째 컬럼을 기준을 잡겠다라는 건데 권장사항이 아니다. ( 명확하게 알 수 없기 때문이다. ) GROUP BY 한 결과로도 ORDER BY 를 사용할 수 있다. ORDER BY 는 이때 마지막줄에 위치한다.
HAVING
만약 공급자별, 카테고리별 기준을 세운 값중 100달러 이상인 데이터를 가져오는건 어떻게 할까?
SELECT SupplierID
, CategroyID
, AVG(Price)
FROM Products
WHERE Price >= 100
GROUP BY SupplierId, CategoryId
해당 쿼리는 전체를 조회하여 Group by를 하였기 때문에 틀린 쿼리이다. GROUP BY를 실행하기 전에 Where문을 실행한다.
결과물들 중 100달러 이상은
SELECT SupplierID
, CategoryID
, AVG(Price)
FROM Products
GROUP BY SupplierId, CategoryID
HAVING AVG(Price) >= 100
GROUP BY 를 실행한 이후 , 필터를 걸어 조건을 걸수 있기때문에 다음과 같이 HAVING 절을 사용하면 적절히 데이터를 가져올수 있다.
'IT > DB' 카테고리의 다른 글
SQL-JOIN (0) | 2021.09.01 |
---|---|
SQL 조건문 - CASE (0) | 2021.09.01 |
집계함수(COUNT/SUM/AVG/MIN/MAX) (0) | 2021.08.22 |
데이터 꺼내오기 (ORDER BY / SUBSTR,RIGTH,LEFT - 문자열자르기 / ROUND/CEIL/FLOOR - 소수점) (0) | 2021.08.16 |
데이터 꺼내오기 (SELECT) - 기본 (0) | 2021.08.16 |