🎯 그룹화하여 데이터 조회하기

MySQL에서 COUNT함수를 이용하면 테이블 전체의 데이터 갯수만 가져온다. 하지만 유형별로 갯수를 알고 싶을 때에는 컬럼에 데이터를 그룹화 할 수 있는 GROUP BY를 사용하는 것이 일반적이다.

GROUP BY를 사용할 때는 아래 두가지를 반드시 기억해야 한다.

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

여기서 WHERE도 조건을 걸 때 많이 쓰이기 때문에 혼란이 발생할 수 있으나 WHERE은 그룹화를 하기 전이고, HAVING은 그룹화 후에 조건을 거는 것이다.

🎯 GROUP BY 사용하기

💎 컬럼 그룹화

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 ...

🎯 예제로 확인하기

👉 문제 확인하기 : 프로그래머스 - 재구매가 일어난 상품과 회원 리스트 구하기

ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC;