SQLite - HAVING 절: 고급 데이터 필터링 마스터링
안녕하세요, 미래의 데이터 마법사 여러분! 오늘은 SQLite 도구 상자에서 가장 강력한 도구 중 하나인 HAVING 절에 대해 깊이 알아보겠습니다. 신경 쓰지 마세요, 이 수업이 끝나면 프로처럼 데이터를 필터링할 수 있을 것입니다!
HAVING 절이란?
자, 구체적인 내용으로 들어가기 전에 준비를 해보겠습니다. 당신이 활발한 아이스크림 가게의 매니저라고 상상해봅시다. 모든 맛, 판매량, 고객 선호도에 대한 데이터를 가지고 있습니다. 이제 이 데이터를 분석하여 현명한 경영 결정을 내리려고 합니다. 여기서 HAVING 절이 유용하게 쓰입니다!
HAVING 절은 특별한 클럽의 보안원 같은东西입니다. 문 앞에서 ID를 확인하고(즉, 데이터를 확인하고), 특정 기준을 충족하는 데이터만 입장을 허용합니다. 이는 특히 집계 함수의 결과에 기반하여 데이터를 필터링하고자 할 때 매우 유용합니다.
문법: HAVING의 문법
HAVING 절의 문법을 분해해보겠습니다:
SELECT column1, column2, ...
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;
이제 이 문법이 현재는 알파벳 수프처럼 보일 수 있지만, 조금씩 설명드리겠습니다:
-
SELECT
: 우리가 볼 컬럼을 선택합니다. -
FROM
: 우리가 데이터를 가져올 테이블을 지정합니다. -
GROUP BY
: 우리의 데이터를 하나 이상의 컬럼에 따라 그룹화합니다. -
HAVING
: 우리의 '보안원', 필터 조건을 기반으로 그룹을 필터링합니다.
기억해야 할 중요한 점은 HAVING이 GROUP BY 뒤에 오는 점입니다. 디저트는 메인 코스 후에 먹는 것처럼!
HAVING vs. WHERE: 동적인 듀오
이제 여러분 중에 이렇게 생각할 수도 있을 것입니다. "WHERE도 데이터를 필터링하지 않나요?" 정말로 훌륭한 질문입니다! 하지만 중요한 차이가 있습니다:
- WHERE는 그룹화되기 전에 개별 로우를 필터링합니다.
- HAVING은 로우가 그룹화된 후 그룹을 필터링합니다.
이렇게 생각해보세요: WHERE는 좋은 사과를 선택하여 바스켓에 넣기 전에 선택하는 것이고, HAVING은 각 바스켓의 사과를 확인하여 기준을 충족하는지 확인합니다.
예제 시간: 데이터를 뽑아보자!
좋아요, 이제 아이스크림 가게 시나리오를 통해 이 지식을 실践에 바꿔보겠습니다. 간단한 테이블을 만들고 HAVING 절을 사용하여 데이터를 분석해보겠습니다.
먼저 테이블을 만들어보겠습니다:
CREATE TABLE ice_cream_sales (
flavor TEXT,
scoops_sold INTEGER,
price REAL
);
INSERT INTO ice_cream_sales (flavor, scoops_sold, price)
VALUES
('Vanilla', 100, 2.50),
('Chocolate', 150, 2.75),
('Strawberry', 75, 3.00),
('Mint Chip', 50, 3.25),
('Chocolate', 125, 2.75),
('Vanilla', 80, 2.50);
이제 우리는 총 100 scoops 이상 판매된 맛을 찾고 싶어보겠습니다. HAVING이 빛을 발합니다:
SELECT flavor, SUM(scoops_sold) as total_scoops
FROM ice_cream_sales
GROUP BY flavor
HAVING total_scoops > 100;
이를 분해해보겠습니다:
- 우리는 flavor와 scoops_sold의 합계(이를 'total_scoops'라고 명명)를 SELECT합니다.
- flavor에 따라 데이터를 GROUP BY하여 각 맛의 판매량을 합산합니다.
- HAVING을 사용하여 100 scoops 이하인 그룹(맛)을 필터링합니다.
결과는 다음과 같을 수 있습니다:
flavor | total_scoops |
---|---|
Chocolate | 275 |
Vanilla | 180 |
와우! 우리는 Chocolate와 Vanilla가 우리의 스타 퍼포머로, 각각 100 scoops 이상 판매되었음을 확인할 수 있습니다.
고급 예제: HAVING과 WHERE를 결합
이제 한 단계 더 발전시켜보겠습니다. 가격이 $2.60 이상인 scoops만 고려하여 100 scoops 이상 판매된 맛을 찾고 싶다면 어떻게 할까요?
SELECT flavor, SUM(scoops_sold) as total_scoops
FROM ice_cream_sales
WHERE price > 2.60
GROUP BY flavor
HAVING total_scoops > 100;
이 쿼리에서:
- WHERE는 가격이 $2.60 이하인 로우를 필터링합니다.
- 그런 다음 flavor에 따라 그룹화하고 scoops_sold를 합산합니다.
- 마지막으로 HAVING은 100 scoops 이하인 그룹을 필터링합니다.
결과는 다음과 같을 수 있습니다:
flavor | total_scoops |
---|---|
Chocolate | 275 |
Chocolate는 여전히 우리의 챔피언이지만, Vanilla는 가격이 $2.60 이하였기 때문에 선택되지 않았습니다.
결론: 새로운 데이터 필터링 슈퍼파워
이제 여러분은 SQLite 여정의 새로운 단계를 열어냈습니다. HAVING 절은 데이터 분석 도구 상자에서 다용도, 강력하고 매우 유용한 도구입니다. 그룹화된 데이터를 더 깊이 탐구할 때 유용합니다.
기억하시기 바랍니다, 연습이 완벽을 만듭니다. 자신만의 테이블을 만들고 다양한 HAVING 조건을 실험해보세요. 얼마 지나지 않아 경험 있는 데이터 셰프처럼 데이터를 자를 수 있을 것입니다!
계속 코딩하고, 계속 배우며, 가장 중요한 것은 데이터를 즐기세요! 누가 알겠습니까? 어有一天你可能会用这些技能改变冰淇淋产业。 그럼 다음에 만나요, 행복한 쿼리링을 기원합니다!
Credits: Image by storyset