SQL 코딩 테스트: GROUP BY · HAVING 문제 모음

GROUP BY / HAVING / 다중 그룹 기준 — Level 2

Level 2 GROUP BY·HAVING 유형 풀이 모음. 다중 컬럼 GROUP BY, HAVING 조건 필터링, WHERE vs HAVING 구분 패턴 등.

Code Test
SQL
저자

Kwangmin Kim

공개

2026년 04월 07일

1 문제 1: 상품별 반복 주문 사용자 조회

1.1 문제 정보

항목 내용
출처 튜터 생성 (앵커: Programmers “재구매가 일어난 상품과 회원 리스트 구하기” Lv.2)
난이도 Level 2
SQL 유형 GROUP BY 다중 컬럼, HAVING

1.2 문제 설명

CREATE TABLE orders (
    order_id   INT  PRIMARY KEY,
    user_id    INT  NOT NULL,
    product_id INT  NOT NULL,
    order_date DATE NOT NULL
);

INSERT INTO orders VALUES
(1, 101, 201, '2024-01-10'),
(2, 101, 202, '2024-01-15'),
(3, 102, 201, '2024-02-01'),
(4, 101, 201, '2024-02-10'),
(5, 103, 203, '2024-02-20'),
(6, 102, 201, '2024-03-20'),
(7, 103, 201, '2024-03-15'),
(8, 104, 204, '2024-03-25');

동일한 상품을 2회 이상 주문한 사용자와 상품 조합을 조회하라. - 출력: user_id, product_id, order_count - 정렬: user_id 오름차순, product_id 내림차순

기대 결과:

user_id product_id order_count
101 201 2
102 201 2

1.3 최종 풀이

SELECT user_id, product_id, COUNT(product_id) AS order_count
FROM orders
GROUP BY user_id, product_id
HAVING order_count >= 2
ORDER BY user_id ASC, product_id DESC;
  • GROUP BY user_id, product_id: 사용자-상품 조합별로 묶어야 중복 주문을 셀 수 있다
  • HAVING order_count >= 2: 집계 결과에 대한 필터 → HAVING 사용 (WHERE는 집계 전 필터)
  • ORDER BY user_id ASC, product_id DESC: 1차 오름차순, 2차 내림차순

1.4 Tips

  • 핵심 개념: GROUP BY 컬럼1, 컬럼2 — 다중 컬럼 그룹핑, HAVING 집계조건
  • 함정: GROUP BY user_id만 쓰면 상품 구분 없이 사용자 단위로 묶여 결과가 달라진다. 조합별로 세려면 그룹 기준에 두 컬럼을 모두 포함해야 한다
  • WHERE vs HAVING: WHERE는 GROUP BY 이전에 행을 필터링, HAVING은 GROUP BY 이후 집계 결과를 필터링

2 관련 문제

Subscribe

Enjoy this blog? Get notified of new posts by email: