SQL문 group by절

강희철·2022년 1월 10일
0

SQL

목록 보기
6/9

여러가지 행을 그룹으로 묶기

group by 절이란?

- 기술된 열을 기준으로 같은 데이터 값끼리 그룹화 한다.

- 같은 데이터 값끼리 그룹화 후 그룹 함수를 유용하게 사용할 수 있다.

group by 절의 특징

- SELECT 절에 기준 열과 그룹함수가 같이 지정되면 GROUP BY 절에 기준 열 이름이 반드시 기술되어야 한다.

- WHERE 절을 사용하면 행을 그룹으로 묶기 전에 앞서 조건식이 적용 가능.

- SELECT 절에 그룹 함수를 사용하지 않아도 GROUP BY 절만으로도 사용 가능.

예제 테이블 ( user )
index name level salary
1 홍길동 3 600
2 고길동 5 300
3 아무개 3 200
4 루피 7 900
5 이기영 5 450
6 호빵맨 4 170
7 세균맨 4 1300

level 이 4 이상인 데이터들의 그룹

SELECT * FROM user where LEVEL >= 4 GROUP BY LEVEL
index name level salary
2 고길동 5 300
4 루피 7 900
6 호빵맨 4 170

level 이 3 이상인 데이터들의 그룹을 그룹 함수를 이용해 가꿔 보기

SELECT LEVEL ,sum(salary) AS '합', AVG (salary) AS '평균' FROM user WHERE LEVEL >= 3 GROUP BY LEVEL ORDER BY level;
level 평균
3 800 400
4 1,470 735
5 750 375
7 900 900


연산된 그룹들에 조건 적용하기!!

앞에서 배운 where 절은 행 ( row ) 에 대한 조건을 적용할 때 사용했었습니다. 그렇지만 그룹에 대한 조건은 HAVING을 사용하는데요

예제를 보며 익혀봅시다.

우선 WHERE 절을 이용해서 조건적용 후 그룹을 묶어보겠습니다.

SELECT * FROM user WHERE salary > 850 GROUP BY level
# salary가 850보다 큰 행 ( row )들을 level이 같은 것들끼리 그룹화합니다.
index name level salary
4 루피 7 900
7 세균맨 4 1300

HAVING 을 사용해 그룹에 대한 조건적용을 해보겠습니다.

SELECT *, SUM(salary) FROM user GROUP BY LEVEL HAVING SUM( salary ) > 850;
#  HAVING 을 이용해 SUM( salary ) 가 850보다 큰 그룹들만 출력!
index name level salary SUM(salary)
4 루피 7 900 900
6 호빵맨 4 170 1,470



그룹에 대한 조건은 HAVING 으로 묶는게 그룹 조건에 더 적합합니다!!.

조건에 해당하는 데이터들의 그룹 / 그룹화된 데이터들의 조건에 해당하는 데이터들은 차이가 많습니다!..

0개의 댓글