mssql having 절은 sql에서 GROUP BY 절과 함께 사용되며, GROUP BY 절에 의해 그룹화된 결과 집합에서 조건을 만족하는 그룹들만 필터링해 주는 역할을 해주는 것이 having 절입니다. SELECT 절에서는 조건을 사용해 주려면 WHERE 절을 사용하지만 GROUP BY 에선 HAVING이 그 역할을 해주는 것입니다.
HAVING절은 WHERE 절과 유사하게 작동하지만, WHERE 절은 행 수준에서 조건을 검사하는 반면 HAVING 절은 GROUP 수준에서 조건을 검사합니다. 따라서 HAVING 절은 GROUP BY 절이우에 사용되며, GROUP BY 절에서 그룹화된 결과 집합에 대한 조건을 지정하는 데 사용된다. 단순하게 생각하면 WHERE 절은 조건에 사용되는 칼럼은 단순칼럼이고, HAVING 절에서는 집계함수를 적용한 칼럼이 조건으로 온다고 생각하면 쉽습니다.
HAVING 사용방법
예를 들어 다음과 같은 주문 테이블이 있다고 가정해 보겠습니다.
여기서, 고객(customer_id) 별로 주문(order_total)의 합계를 계산하고자 한다면, 다음과 같은 SQL 쿼리문을 작성할 수 있습니다.
SELECT customer_id, SUM(order_total) AS total_order
FROM orders
GROUP BY customer_id
위의 SQL 쿼리문을 실행하게 되면 아래와 같은 결과가 출력되게 됩니다.
여기서 주문 금액 합계가 200 이상 고객만 조건을 걸고 필터링을 하고 싶다면, HAVING 절을 사용하여 다음과 같이 SQL문을 작성할 수 있습니다.
SELECT customer_id, SUM(order_total) AS total_order
FROM orders
GROUP BY customer_id
HAVING SUM(order_total) >= 200
위의 sql 문중 HAVING절을 포함한 쿼리를 실행하게 되면 아래와 같은 쿼리문을 확인할 수 있습니다.
즉, HAVING 절은 그룹화된 결과 집합에서 조건을 만족하는 그룹들만 필터링하는 데 사용된다.
HAVING 절 조건
SQL HAVING절에서는 그룹 함수를 사용하여 그룹화된 결과 집합에 대한 조건을 지정할 수 있습니다. 그룹 함수는 그룹화된 결과 집합에서 계산된 값을 반환하는 함수입니다.
HAVING 절에서 조건을 걸 수 있는데 다음과 같은 조건을 지정할 수 있습니다.
- 그룹 함수를 사용한 비교 연산자(=, >, <, >=, <=, <>)를 사용하여 그룹화된 결과 집합에 대한 조건을 지정할 수 있습니다.
- 그룹함수를 사용한 논리 연산자(AND, OR, NOT)를 사용하여 여러 개의 조건을 결합할 수 있습니다.
- 그룹함수를 사용한 IN 연산자를 사용하여 여러 개의 값을 비교할 수 있습니다.
- 그룹함수를 사용한 LIKE 연산자를 사용하여 문자열 패턴을 비교할 수 있습니다.
위의 값으로 HAVING절 안에 여러 개의 조건을 사용하여 쿼리를 짤예정입니다. 여기서 주문 금액 합계가 100보다 큰 고객 중에서, 고객 ID가 101인 고객을 필터링하고 싶다면 다음과 같은 SQL문 쿼리를 작성할 수 있습니다.
SELECT customer_id, SUM(order_total) as total_order
FROM orders
GROUP BY customer_id
HAVING SUM(order_total) > 100 AND customer_id = 101
위의 쿼리문중 HAVING 절 안에 주문금액 합계(order_total)와 함께 논리연산자인 and와 함께 고객(customer_id)을 조건으로 HAVING 절 안에 여러 개를 사용해서 결괏값을 출력할 수 있습니다.
위의 쿼리 결과는 아래와 같습니다.
즉, HAVING 절에서는 GROUP BY 절에 지정된 그룹 함수(SUM, COUNT, AVG 등)를 사용하여 그룹화된 결과 집합에 대한 조건을 지정할 수 있습니다.
댓글