SQL - Having 절
안녕하세요, 미래의 SQL 마법사 여러분! 오늘 우리는 SQL HAVING 절의 세상으로 흥미로운 여정을 떠납니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 이 모험을 단계별로 안내해드리겠습니다. 그러니 가상의 메모지를 손에 들고, 함께 뛰어들어보겠습니다!
SQL HAVING 절
자, 친구들과 파티를 조직하는 데 있어서, 당신과 5명 이상의 공통 친구가 있는 친구들만 초대하고 싶다면 어떨까요? SQL에서 HAVING 절이 하는 일이 exactamente 그거입니다. 그것은 특정 조건에 기반하여 그룹 결과를 필터링해줍니다.
HAVING 절은 데이터 파티의 문 앞에 선 보디가드와 같습니다. 당신이 설정한 규칙에 따라 어떤 데이터 그룹이 들어올 수 있는지 결정합니다. 간단한 예제를 보겠습니다:
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;
이 예제에서 우리는 각 부서의 평균 급여를 보고 싶지만, 평균 급여가 $50,000 이상인 부서만 보고 싶습니다. HAVING 절은 우리의 보디가드로서, 각 그룹(부서)을 검사하고 우리의 기준을 충족하는 그룹만 허용합니다.
HAVING 절과 GROUP BY 절
HAVING 절은 GROUP BY와 자주 함께 사용됩니다. 두 친구처럼 항상 함께 다니는 것처럼요. GROUP BY는 데이터를 그룹으로 정리하고, HAVING은 이 그룹을 조건에 따라 필터링합니다.
다른 예제를 보겠습니다:
SELECT product_category, COUNT(*) as product_count
FROM products
GROUP BY product_category
HAVING COUNT(*) > 10
ORDER BY product_count DESC;
여기서 무슨 일이 일어나고 있는지 보겠습니다:
- 우리는 제품을 카테고리별로 그룹화하고 있습니다.
- 각 카테고리에 있는 제품의 수를 계산하고 있습니다.
- HAVING 절은 10개 이상의 제품이 있는 카테고리만 허용합니다.
- 마지막으로, 우리는 제품 수를 내림차순으로 정렬합니다.
이는 옷장을 정리하는 것처럼, 10개 이상의 아이템이 있는 섹션만 남기고, 그것들을 많은 것부터 적은 것으로 정렬하는 것과 같습니다.
HAVING 절과 ORDER BY 절
이전 예제에서 보았듯이, HAVING은 ORDER BY와도 잘 어울립니다. 또 다른 예제를 보겠습니다:
SELECT customer_id, SUM(order_total) as total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(order_total) > 1000
ORDER BY total_spent DESC;
이 쿼리는 VIP 고객을 찾는 것과 같습니다:
- 우리는 주문을 고객별로 그룹화하고 있습니다.
- 각 고객이 지출한 총 금액을 계산하고 있습니다.
- HAVING 절은 $1000 이상을 지출한 고객만 허용합니다.
- 그런 다음, 우리는 이 VIP 고객들을 지출 금액이 높은 순서로 정렬합니다.
HAVING 절과 COUNT() 함수
COUNT() 함수는 HAVING의 충실한 동반자입니다. 예제를 보겠습니다:
SELECT author, COUNT(book_id) as book_count
FROM books
GROUP BY author
HAVING COUNT(book_id) >= 5
ORDER BY book_count DESC;
이 쿼리는 많은 책을 쓴 작가를 찾는 것입니다:
- 우리는 책을 작가별로 그룹화하고 있습니다.
- 각 작가가 쓴 책의 수를 계산하고 있습니다.
- HAVING 절은 5권 이상의 책을 쓴 작가만 허용합니다.
- 그런 다음, 우리는 가장 많은 책을 쓴 작가부터 정렬합니다.
HAVING 절과 AVG() 함수
AVG() 함수도 HAVING의 좋은 친구입니다. 그들을 활용해 보겠습니다:
SELECT department, AVG(performance_score) as avg_score
FROM employee_performance
GROUP BY department
HAVING AVG(performance_score) > 8.5
ORDER BY avg_score DESC;
이 쿼리는 스타 성과를 가진 부서를 찾는 것입니다:
- 우리는 성과 점수를 부서별로 그룹화하고 있습니다.
- 각 부서의 평균 점수를 계산하고 있습니다.
- HAVING 절은 평균 점수가 8.5 이상인 부서만 허용합니다.
- 그런 다음, 우리는 가장 높은 성과를 가진 부서부터 정렬합니다.
HAVING 절과 MAX() 함수
마지막으로, HAVING이 MAX() 함수와 어떻게 작동하는지 보겠습니다:
SELECT product_category, MAX(price) as highest_price
FROM products
GROUP BY product_category
HAVING MAX(price) > 1000
ORDER BY highest_price DESC;
이 쿼리는 럭셔리 제품 카테고리를 찾는 것입니다:
- 우리는 제품을 카테고리별로 그룹화하고 있습니다.
- 각 카테고리의 최고 가격을 찾고 있습니다.
- HAVING 절은 최소 하나의 제품이 $1000 이상의 가격을 가진 카테고리만 허용합니다.
- 그런 다음, 우리는 가장 비싼 아이템을 가진 카테고리부터 정렬합니다.
그렇게 해서, 여러분은 HAVING 절과 그의 친구들에 대해 배웠습니다! 연습이 완벽을 이루는 열쇠이니, 이 쿼리들을 실험해 보지 마세요. 얼마 지나지 않아 프로처럼 복잡한 SQL 쿼리를 작성할 수 있을 것입니다!
여기 우리가 다루었던 방법们的 빠른 참고 표입니다:
방법 | 설명 | 예제 |
---|---|---|
HAVING | 그룹 결과를 필터링 | HAVING AVG(salary) > 50000 |
GROUP BY | 행을 유사한 값을 기준으로 그룹화 | GROUP BY department |
ORDER BY | 결과 집을 정렬 | ORDER BY total_spent DESC |
COUNT() | 행의 수를 계산 | HAVING COUNT(book_id) >= 5 |
AVG() | 값들의 평균을 계산 | HAVING AVG(performance_score) > 8.5 |
MAX() | 값들의 최대값을 반환 | HAVING MAX(price) > 1000 |
Happy querying, and may your data always be clean and your queries efficient!
Credits: Image by storyset