[MySQL] 그룹화하여 데이터조회 (GROUP BY)

hukim·2020년 11월 29일
2

MySQL

목록 보기
3/4

MySQL 에서 유형별로 개수를 가져오고 싶은데 단순히 COUNT 함수로 데이터를 조회하면 전체 개수만을 가져옵니다.
유형별로 개수를 알고 싶을 떄는 컬럼의 데이터를 그룹화 할 수 있는 GROUP BY를 이용합니다.

  • 특정 컬럼을 그룹화 하는 GROUP BY
  • 특정 컬럼을 그룹화한 결과에 조건을 거는 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 컬럼;

EXAMPLE

SELECT info.id, s.account, m.manager_name
FROM sellers_informations as info
INNER JOIN sellers AS s ON info.seller_id = s.id
LEFT JOIN managers AS m ON info.seller_id = m.seller_id

sellers_informations테이블에서 sellers테이블과 managers테이블을 각각 INNER JOIN, LEFT JOIN을 했습니다.

결과는 위와 같이 나왔는데 그 이유는 managers테이블에서 같은 seller_id로 두 개가 참조되고 있기 때문입니다.

이 것을 하나의 row로 나타내기 위해서 GROUP BY를 사용하면

SELECT info.id, s.account, m.manager_name
FROM sellers_informations as info
INNER JOIN sellers AS s ON info.seller_id = s.id
LEFT JOIN managers AS m ON info.seller_id = m.seller_id
GROUP BY info.id

sellers_informations의 id값을 기준으로 같은 것은 그룹화되어 나타납니다.

0개의 댓글