디케이
MySQL 그룹화하여 데이터 조회 (GROUP BY) 본문
반응형
▶설명
하나, 예를 들어보겠습니다.
MySQL에서 유형별로 갯수를 가져오고 싶은데, 단순히 COUNT 함수로 데이터를 조회하면 전체 갯수만을 가져옵니다.
이렇게 유형별로 갯수를 알고 싶을 때는 컬럼에 데이터를 그룹화 할 수 있는 GROUP BY를 사용하는 것입니다.
GROUP BY를 사용할 때는 두가지를 기억해야 합니다.
특정 컬럼을 그룹화 하는 GROUP BY
특정 컬럼을 그룹화한 결과에 조건을 거는 HAVING
* WHERE랑 HAVING을 헷깔리는 경우가 많은데 WHERE는 그룹화 하기 전이고, HAVING은 그룹화 후에 조건입니다.
그럼 이제 사용법을 정리하겠습니다.
▶사용법
컬럼 그룹화
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;
조건 처리 후에 컬럼 그룹화
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼;
컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼 HAVING 조건식;
조건 처리 후에 컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼 HAVING 조건식;
ORDER BY가 존재하는 경우
SELECT 컬럼 FROM 테이블 [WHERE 조건식]
GROUP BY 그룹화할 컬럼 [HAVING 조건식] ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...];
▶예제 쿼리 (Example Query)
예제 테이블 : hero_collection
idx |
type |
name |
1 |
1 |
안중근 |
2 |
1 |
윤봉길 |
3 |
2 |
김유신 |
4 |
2 |
이순신 |
5 |
3 |
이성계 |
6 |
3 |
왕건 |
7 |
4 |
반갑수 |
type 그룹화하여 name 갯수 조회 (컬럼 그룹화)
쿼리SELECT type, COUNT(name) AS cnt FROM hero_collection GROUP BY type;
결과
type |
cnt |
1 |
2 |
2 |
2 |
3 |
2 |
4 |
1 |
type 1 초과인, type 그룹화하여 name 갯수 조회 (조건 처리 후 컬럼 그룹화)
쿼리SELECT type, COUNT(name) AS cnt FROM hero_collection WHERE type > 1 GROUP BY type;
결과
type |
cnt |
2 |
2 |
3 |
2 |
4 |
1 |
type 그룹화하여 name 갯수를 가져온 후, 그 중에 갯수가 2개 이상인 데이터 조회 (조건 처리 후에 컬럼 그룹화 후에 조건 처리)
쿼리SELECT type, COUNT(name) AS cnt FROM hero_collection GROUP BY type HAVING cnt >= 2;
결과
type |
cnt |
1 |
2 |
2 |
2 |
3 |
2 |
type 1 초과인, type 그룹화하여 name 갯수를 가져온 후, 그 중에 갯수가 2개 이상인 데이터 조회 (조건 처리 후에 컬럼 그룹화 후에 조건 처리)
쿼리
결과
type |
cnt |
2 |
2 |
3 |
2 |
type 1 초과인, type 그룹화하여 name 갯수를 가져온 후, 그 중에 갯수가 2개 이상인 데이터를 type 내림차순 정렬로 조회 (내림차순 정렬)
쿼리
SELECT type, COUNT(name) AS cnt FROM hero_collection
WHERE type > 1 GROUP BY type HAVING cnt >= 2 ORDER BY type DESC;
결과
type |
cnt |
3 |
2 |
2 |
2 |
출처: https://extbrain.tistory.com/56 [확장형 뇌 저장소]
반응형
'SQL' 카테고리의 다른 글
프로그래머스 - SQL 최댓값 구하기 (0) | 2020.11.23 |
---|---|
프로그래머스 - SQL 동물 수 구하기 (0) | 2020.11.23 |
MySQL (SQLyog) 아이디비밀번호 설정 코드 (0) | 2020.11.13 |
MySQL 에서 데이터 받아오기_첫 연습 (0) | 2020.11.12 |
MySQL 기본 명령어 예제_2 (0) | 2020.11.11 |