SQL 기초 - 2 (group by, having 사용법)

박건우·2023년 10월 26일
1

SQL

목록 보기
3/7

> 클릭하여 문제 풀어보기

주어진 문제는 다음과 같다.

내가 쓴 정답은 다음과 같다.

select USER_ID, PRODUCT_ID
from ONLINE_SALE
group by USER_ID, PRODUCT_ID
having count(*) >= 2
order by USER_ID, PRODUCT_ID desc;

우선 group by와 having은 무엇인가.

group by는 다수의 열(column)을 하나로 묶는다는 뜻이다.

group by 그룹화할 컬럼 나열;
group by USER_ID, PRODUCT_ID

having은 group by의 조건을 추가하는 용도로 사용했다.
여기서 count(*)은 행의 개수를 세는 함수다.

having 조건식
having count(*) >= 2

위의 정답에서 그룹화를 한 이유는 다음과 같다.

  1. 재구매를 했다는 것은, 회원id와 상품id가 같은 행이 2개 이상이어야 한다.
  2. 회원id, 상품id를 하나로 묶어 중복조회 하는 것이 더 쉽다.

한 줄씩 해석해보자면

select USER_ID, PRODUCT_ID
// 찾는 항목은 USER_ID와 PRODUCT_ID 이다.

from ONLINE_SALE
// ONLINE_SALE 이라는 테이블에서 찾을 것이며,

group by USER_ID, PRODUCT_ID
// 중복 조회를 위해 USER_ID, PRODUCT_ID 을 묶어서 하나의 열로 묶고,

having count(*) >= 2
// 2개 이상인 항목을 찾아라(재구매 하였다면).

order by USER_ID, PRODUCT_ID desc;
// 결과를 USER_ID 오름차순으로 나열, 같으면 PRODUCT_ID 내림차순 나열.

0개의 댓글