그룹 개수 세기와 필터링하기
기준을 충족하는 그룹을 찾고 ‘N개보다 많은 주문을 한 고객’이라는 대표적인 질문을 해결합니다.
그룹 개수 세기와 필터링하기은(는) CoddyKit의 무료 SQL Interview Prep 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
가장 흔한 그룹화 질문
'주문이 N건을 초과하는 고객 찾기'는 전형적인 GROUP BY 면접 문제입니다. 상품을 X번 초과하여 판매한 경우, 직원이 Y명 이상인 부서, 로그인이 Z건을 초과한 날짜 등 다양한 변형이 끊임없이 등장합니다.
모두 같은 패턴입니다. 그룹화하고, 개수를 센 다음, HAVING으로 그룹을 필터링합니다.
1단계: 그룹별 개수 세기
각 그룹 안의 행 개수부터 세십시오. '고객'이나 '상품'을 정의하는 키로 그룹화한 다음 COUNT(*)를 적용합니다.
그러면 각 그룹의 크기와 함께 그룹마다 한 행이 만들어집니다. 아직 필터링하지 않고 각 그룹을 측정하기만 한 상태입니다.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;2단계: HAVING으로 필터링하기
이제 기준을 충족하는 그룹만 남기십시오. 조건이 집계 값에 대한 것이므로 WHERE가 아니라 HAVING에 작성해야 합니다.
다음과 같이 이해하십시오. '고객별로 주문을 그룹화한 다음, 개수가 5를 초과하는 고객만 남긴다.' 이것이 고전적인 질문에 대한 완전한 답변입니다.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;고유 개수와 전체 개수 비교
문구를 주의 깊게 읽으십시오. '서로 다른 상품을 3개 초과하여 주문한 고객'에는 COUNT(*)가 아니라 COUNT(DISTINCT product_id)가 필요합니다.
COUNT(*)는 그룹의 행을 셉니다.COUNT(DISTINCT col)은 NULL이 아닌 고유한 값을 셉니다.
면접관은 DISTINCT를 선택하는지 확인하기 위해 질문에 '서로 다른' 또는 '고유한'이라는 표현을 넣습니다.
SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;COUNT 대신 SUM으로 필터링하기
같은 구조로 합계도 처리할 수 있습니다. '총 지출액이 1000을 초과하는 고객'은 고객별로 그룹화하고 SUM(amount)로 필터링합니다.
어떤 집계든 HAVING 조건을 결정할 수 있습니다. COUNT, SUM, AVG, MAX, MIN이 그 예입니다. 질문에서 요구하는 측정값을 파악하면 어떤 집계로 필터링할지 알 수 있습니다.
SELECT customer_id, SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;여러 그룹 조건
HAVING은 서로 다른 집계를 포함하여 AND/OR로 조건을 결합할 수 있습니다. '주문이 5건을 초과하고 AND 평균 주문 금액이 100을 초과하는 고객'은 하나의 HAVING 절로 작성할 수 있습니다.
각 조건은 자체 집계 값을 참조하며, 모든 조건은 그룹화 후에 평가됩니다. 이를 통해 복합적인 업무 규칙을 깔끔하게 표현할 수 있음을 보여 줍니다.
SELECT customer_id,
COUNT(*) AS orders,
AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;WHERE와 HAVING 결합하기
개수를 세기 전에 행을 필터링해야 하는 경우가 많습니다. '올해 주문 중 주문이 5건을 초과하는 고객'은 날짜에 WHERE를 사용하고 개수에 HAVING을 사용합니다.
WHERE가 먼저 행을 줄인 다음 그룹화와 HAVING 기준이 적용됩니다. 하나의 쿼리에서 두 절을 모두 올바르게 사용하는 것이 중급 수준임을 보여 주는 요소입니다.
SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;중복 찾기
비슷한 문제로 '중복 이메일 찾기'가 있습니다. 고유해야 하는 열로 그룹화하고 개수가 1을 초과하는 그룹만 남기십시오.
이 하나의 패턴으로 중복 키, 반복 거래 또는 예상보다 많이 나타나는 모든 값을 찾을 수 있습니다. 면접관은 그룹화를 중복 제거 도구로 이해하는지 확인하기 위해 이 문제를 냅니다.
SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;개수가 정확히 일치하는 그룹
임계값이 항상 '초과'인 것은 아닙니다. '주문이 정확히 하나인 고객'에는 HAVING COUNT(*) = 1을 사용하고, '최소 3개'에는 >= 3을 사용합니다.
질문에서 경계 조건을 나타내는 표현에 주의하세요: '초과', '최소', '정확히', '미만'. 각각 다른 비교 연산자에 대응하며, 면접관은 이러한 정확성을 확인합니다.
-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;키만 반환하기
때로는 질문에서 개수가 아니라 조건을 충족하는 식별자만 요구하며, 이러한 식별자를 다른 쿼리에 전달하는 경우가 많습니다. 여전히 그룹화하고 필터링하지만, SELECT에는 키만 지정합니다.
그런 다음 이를 IN 서브쿼리로 감싸거나 조인하여 해당 고객의 전체 레코드를 가져올 수 있습니다. 이러한 조합을 이해하고 있다면 숙련자다운 인상을 줄 수 있습니다.
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;면접 대응 지침
어떤 '임계값을 충족하는 그룹' 문제든 다음 네 단계를 소리 내어 설명하세요: (1) 그룹화 키를 식별하고, (2) 집계할 측정값을 고르고, (3) 표현에 따라 비교 연산자를 결정하고, (4) 행 필터는 WHERE에, 집계 필터는 HAVING에 넣습니다.
이 템플릿으로 개수 세기와 필터링 문제 전체를 해결할 수 있습니다.
빠른 확인
질문에 맞는 올바른 쿼리를 고르세요.
복습
패턴: 키로 그룹화하고, 집계한 다음, HAVING으로 그룹을 필터링합니다. 이 방법으로 'N개보다 많은 주문', '지출액이 가장 큰 고객', 중복 항목, 일회성 고객 문제를 해결할 수 있습니다.
- 행에는
COUNT(*)을 사용하고, 고유한 값에는COUNT(DISTINCT col)을 사용합니다. - 질문의 표현에 맞는 비교 연산자를 사용합니다.
- 행 필터는 WHERE에, 집계 필터는 HAVING에 넣습니다.
- IN 서브쿼리나 조인에 전달하려면 키만 SELECT합니다.
자주 묻는 질문
“그룹 개수 세기와 필터링하기” 강의는 무료인가요?
네 — “그룹 개수 세기와 필터링하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Interview Prep 강의 전체를 잠금 해제할 수 있습니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“그룹 개수 세기와 필터링하기”에서 뭘 배우나요?
기준을 충족하는 그룹을 찾고 ‘N개보다 많은 주문을 한 고객’이라는 대표적인 질문을 해결합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“그룹 개수 세기와 필터링하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- SELECT 열에 적용되는 GROUP BY 규칙
- HAVING과 WHERE 비교하기
- 여러 열과 수식으로 그룹화하기
- 그룹 개수 세기와 필터링하기