프로그래밍/database
GROUP BY 2개 이상
브래드 킴
2022. 12. 10. 13:40
728x90
위와 같이 생긴 상품 구매 table이 있다고 하자.
동일한 상품을 2번이상 재구매한 고객을 따로 추출하고자 한다. 즉, 어떤 고객이 어떤 상품을 재구매했는지 파악하고자 한다.
위의 테이블을 보면 id 1번 고객은 상품3을 2번 재구매 하였다. 2번 고객은 2번이상 재구매한 상품은 없다. 3번 고객은 상품1을 2번 재구매 하였으므로 최종적으로 아래표와 같은 형태의 데이터가 추출 되어야 한다.
USER_ID | PRODUCT_ID |
1 | 3 |
3 | 1 |
이때 user_id로만 group by하여 count(*)>=2 하게 되면, 1,2,3고객 모두가 조회가 될 것이고,
product_id로만 group by하여 count(*)>=2 하게 되더라도, 원하는 값을 얻지 못할것이다.
그래서 2번 이상 구매한 user중에 같은 상품을 2번을 구매한 데이터를 추출하기 위한 2개이상의 group by가 필요하다.
SELECT USER_ID, PRODUCT_ID from test_table GROUP BY USER_ID,PRODUCT_ID;
위와 같이, GROUP BY를 2개를 지어줄 경우, 중복 된 USER와 PRODUCT가 제거된채 아래와 같이 출력된다.
그러나 고객1이 몇개의 PRODUCT를 구매했는지는 위의 쿼리만으로는 알수는 없기에, 위 데이터를 뽑기 이전에 아래와 같이 HAVING 조건을 걸어 PRODUCT_ID가 2개 이상인 경우만을 조회하면, 같은 상품을 재구매한 고객을 추출해낼 수 있다.
SELECT USER_ID, PRODUCT_ID from test_table GROUP BY USER_ID,PRODUCT_ID HAVING COUNT(PRODUCT_ID)>=2;
728x90