MySQL - Having 절
안녕하세요, 데이터베이스 열정가 여러분! 오늘 우리는 MySQL의 강력한 기능 중 하나인 HAVING 절에 대해 깊이 알아보겠습니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 이 여정을 안내해드리게 되어 기쁩니다. 프로그래밍 초보자라也不用担心; 우리는 단계별로 천천히 진행하겠습니다. 곧 프로처럼 데이터를 필터링할 수 있을 거예요!
MySQL Having 절
基础から始めましょう. HAVING 절은 클럽의 보안 personnel처럼 생각해보세요. 그러나 그들은 신분증을 확인하는 것이 아니라 데이터 그룹을 확인합니다. 그룹화된 레코드를 특정 조건을 만족하는지 필터링하는 데 사용됩니다.
만약 당신이 만화책 모음을 정리하는 중이라고 가정해봅시다. 슈퍼 헴로分组했지만, 지금은 5권 이상의 만화에 등장하는 영웅들만 보고 싶다면, HAVING 절이 필요합니다!
기본 문법은 다음과 같습니다:
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
간단한 예제를 보겠습니다. 가정할 때 employees
테이블이 있습니다:
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING employee_count > 10;
이 쿼리는 10명 이상의 직원을 가진 모든 부서를 표시합니다. HAVING 절은分组된 후 employee_count
를 확인합니다.
WHERE와 HAVING 사용 시기
"기다리다, 교수님! WHERE하고 똑같지 않나요?"라고 생각할 수도 있습니다. 훌륭한 질문입니다! 중요한 차이는 다음과 같습니다:
- WHERE는分组 전에 개별 행을 필터링합니다.
- HAVING은分组 후에 그룹을 필터링합니다.
WHERE는 초기 보안 검사라고 생각하고, HAVING은 패티의 VIP 목록이라고 생각해보세요!
HAVING 절과 ORDER BY 절
이제 결과에 순서를 추가해보겠습니다. ORDER BY 절은 극장의 안내원처럼, 모두가 적절한 자리에 앉도록 합니다.
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING avg_salary > 50000
ORDER BY avg_salary DESC;
이 쿼리는 평균 급여가 $50,000을 초과하는 부서를 표시하고, 높은 급여 순으로 정렬합니다. 회사의 "고액 수령자" 목록을 작성하는 것과 같습니다!
HAVING 절과 COUNT() 함수
COUNT() 함수는 신뢰할 수 있는 계산기입니다. 바쁜 매니저를 찾아보겠습니다:
SELECT manager_id, COUNT(*) as team_size
FROM employees
GROUP BY manager_id
HAVING team_size > 5
ORDER BY team_size DESC;
이 쿼리는 5명 이상의 팀원을 가진 매니저를 나열합니다. 교사 중 가장 큰 수업을 가진 교사를 찾는 것과 같습니다!
HAVING 절과 AVG() 함수
AVG()는 친절한 이웃 평균 계산기입니다. 높은 성과를 내는 제품 카테고리를 찾아보겠습니다:
SELECT category, AVG(price) as avg_price
FROM products
GROUP BY category
HAVING avg_price > 100
ORDER BY avg_price DESC;
이 쿼리는 평균 가격이 $100을 초과하는 제품 카테고리를 표시합니다. 백화점의 럭셔리 섹션을 식별하는 것과 같습니다!
HAVING 절과 MAX() 함수
MAX()는 데이터의 고이점 챔피언입니다. 가장 비싼 제품을 찾아보겠습니다:
SELECT category, MAX(price) as max_price
FROM products
GROUP BY category
HAVING max_price > 1000
ORDER BY max_price DESC;
이 쿼리는 각 카테고리에 최소 하나의 제품이 $1000 이상의 가격을 가지는 카테고리를 나열합니다. 각 부서의 "고가 품목"을 찾는 것과 같습니다!
HAVING 절을 사용한 클라이언트 프로그램
이제 MySQL 클라이언트 프로그램을 사용하여 모든 것을 실습해보겠습니다. 전통적인 서적 가게 데이터베이스 예제를 사용하겠습니다:
-- 책 테이블 생성
CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(50),
genre VARCHAR(50),
price DECIMAL(5,2),
sold INT
);
-- 일부 샘플 데이터 삽입
INSERT INTO books (title, author, genre, price, sold) VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', 'Classic', 12.99, 1000),
('To Kill a Mockingbird', 'Harper Lee', 'Classic', 14.99, 1500),
('1984', 'George Orwell', 'Sci-Fi', 11.99, 2000),
('Pride and Prejudice', 'Jane Austen', 'Romance', 9.99, 1800),
('The Hobbit', 'J.R.R. Tolkien', 'Fantasy', 19.99, 2500),
('Harry Potter', 'J.K. Rowling', 'Fantasy', 24.99, 5000),
('The Catcher in the Rye', 'J.D. Salinger', 'Classic', 13.99, 1200);
-- 이제 HAVING을 사용하여 우리의 책 판매를 분석해보겠습니다
SELECT genre, AVG(price) as avg_price, SUM(sold) as total_sold
FROM books
GROUP BY genre
HAVING total_sold > 2000
ORDER BY total_sold DESC;
이 쿼리는 총 판매량이 2000부 이상인 장르를 표시하고, 평균 가격을 계산합니다. 우리의 서점에서 베스트셀러 섹션을 찾는 것과 같습니다!
다음은 발생하는 일의 분석입니다:
- 우리는 장르, 평균 가격, 총 판매량을 선택합니다.
- 결과를 장르별로分组합니다.
- HAVING 절은 총 판매량이 2000 이하인 장르를 필터링합니다.
- 마지막으로, 결과를 총 판매량이 높은 순으로 정렬합니다.
이제 여러분은 데이터에서 유용한 통찰을 얻기 위해 HAVING 절을 사용할 수 있습니다. 연습이 완벽을 만듭니다. 자신의 쿼리를 실험해보세요!
여기서 사용한 함수들의 빠른 참조 표입니다:
함수 | 설명 | 예제 |
---|---|---|
COUNT() | 그룹의 행 수를 계산합니다 | HAVING COUNT(*) > 5 |
AVG() | 값의 평균을 계산합니다 | HAVING AVG(price) > 100 |
MAX() | 값의 최대值를 반환합니다 | HAVING MAX(price) > 1000 |
SUM() | 값의 합을 계산합니다 | HAVING SUM(sold) > 2000 |
미래의 데이터 마법사 여러분, 즐겁게 쿼리 작성하세요!
Credits: Image by storyset