[SQL] GROUP BY

오도원공육사·2021년 10월 14일
0

SQL

목록 보기
4/15
post-thumbnail

테이블의 유형별로 개수를 가져오고자 한다. COUNT를 사용할 수 있지만 이 경우에는 전체 개수만을 가져오게 된다. 이렇게 유형별로 조회하고자 할 때 사용하는 것이 GROUP BY이다.

  • 특정 컬럼을 그룹화하는 GROUP BY
  • 그룹화한 결과에 조건을 거는 HAVING

* WHERE은 그룹화 하기 전의 조건이고, HAVING은 그룹화한 후의 조건이다.

1. 컬럼그룹화

SELECT 필드 FROM 테이블 GROUP BY 그룹화할컬럼;

2. 조건 처리 후에 컬럼 그룹화

SELECT 필드 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할컬럼;

3. 컬럼 그룹화 후에 조건 처리

SELECT 필드 FROM 테이블 GROUP BY 그룹화할컬럼 HAVING 조건식;

4. 조건 처리 후 컬럼 그룹화, 그룹화 후에 조건 처리

SELECT 필드 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할컬럼 HAVING 조건식;

5. ORDER BY가 존재하는 경우

SELECT 필드 FROM 테이블 WHERE 조건식
GROUP BY 그룹화할컬럼 HAVING 조건식 ORDER BY 필드1, 필드2, 필드3, ...;

예시

FOOD 테이블

1. 나라별로 음식이름 개수 조회

SELECT COUNTY, COUNT(NAME) AS CNT FROM FOOD GROUP BY COUNTRY;

결과

2. 나라가 한국인 음식이름 개수 조회

SELECT COUNTY, COUNT(NAME) AS CNT FROM FOOD 
WHERE COUNTRY LIKE "KOREAN" 
GROUP BY COUNTRY;

결과

3. 나라별 음식개수에 대해서 2개 이상인 데이터 조회

SELECT COUNTY, COUNT(NAME) AS CNT FROM FOOD GROUP BY COUNTRY HAVING CNT > 2;

결과

4. "ESE"로 끝나는 나라에 대해서 음식 개수 조회 후 그 중에서 개수가 2개 이상인 데이터 조회

SELECT COUNTRY, COUNT(NAME) AS CNT FROM FOOD
WHERE COUNTRY LIKE "%ESE"
GROUP BY COUNTRY
HAVING CNT > 2;

결과

5. "ESE"로 끝나는 나라에 대해서 음식 개수 조회 후 그 중에서 개수가 2개 이상인 데이터를 내림차순으로 조회

SELECT COUNTRY, COUNT(NAME) AS CNT FROM FOOD
WHERE COUNTRY LIKE "%ESE"
GROUP BY COUNTRY
HAVING CNT > 2
ORDER BY COUNT DESC;

결과

profile
잘 먹고 잘살기

0개의 댓글