안녕하세요!!
이번 포스팅에서는 SQL HAVING 구문에 대해서 설명하겠습니다.
예전에 ERP 시스템을 만들때는 종종 사용한듯 한데 규모가 그다지 크지 않은 홈페이지를 구축할땐 거의 사용하지 않았습니다. 그래도 HAVING은 중요한 역할을 하는 녀석(?) 이기 때문에 알아두면 도움이 많이 될듯합니다.
HAVING 은 group by 에서 사용하는 조건구문 이라고 생각하면 됩니다. where 조건에서는 집계함수와 함께 사용할 수 없기 때문에 having 을 이용해야 합니다.
기본적으로 having 는 select ..... group by .... having... 으로 사용됩니다.
SELECT column_name1, function(column_name2)
FROM table_name
WHERE column_name1 = 'value'
GROUP BY column_name1
HAVING function(column_name1) = 'value';
// group by 구문에 조건을 걸기 위해 having을 사용하게 됩니다.
지금까지 설명이 조금 어려웠다면 이제 부터 하나의 테이블을 예를들어 설명해보겠습니다.(group by 에 대한 내용은 바로 전 포스팅을 해놓았으니 참조하시기 바랍니다.)
이전 포스팅의 테이블을 이용하여 진행해보겠습니다.
id |
coffee_name |
price |
guest |
1 |
아메리카노 |
2500 |
김 |
2 |
카페라떼 |
3000 |
박 |
3 |
아메리카노 |
2500 |
이 |
4 |
카페모카 |
3500 |
송 |
// 테이블 이름은 coffee 라고 정의하겠습니다.
group by 구문의 경우
select coffee_name, SUM(price) as total_price from coffee group by coffee_name;
coffee_name |
total_price |
아메리카노 |
5000 |
카페라떼 |
3000 |
카페모카 |
3500 |
// 나오게 됩니다. 그럼 여기에서 한가지 더 조건을 걸어보겠습니다.
coffee_name 의 이름이 두 개 이상되는 값만 가져오려고 하려면 어떻게 해야 할까요? group by 를 하면 위 결과값처럼 그룹으로 묶어 버리기 때문에 몇 개가 얼마나 카운트 되었는지 사실 알 길이 없습니다. 이럴때 필요한게 바로 HAVING 입니다.
select coffee_name, SUM(price) as total_price from coffee group by coffee_name HAVING COUNT(coffee_name) > 1;
// 우선 having 을 적은 후 집계에 대한 조건을 걸 수 있습니다. 그래서 결과값중에서 1 보다 초과된 값만 가져오게 됩니다.
즉, 결과는 아래와 같이 나오게 됩니다.
coffee_name |
total_price |
아메리카노 |
5000 |
지금까지 HAVING 에 대해서 설명드렸습니다. 간단하게 기본적인 내용을 적었지만 항상 응용을 해보셔야 스킬이 점점더 늘지 않을까 합니다. 다음 포스팅에서는 UCASE(), LCASE() 에 대해서 알아보겠습니다.
남은 하루 시간 알차게 보내시고 즐거운 프로그래밍 되세요!!
'SQL' 카테고리의 다른 글
SQL MID() 함수 (0) | 2013.10.12 |
---|---|
SQL UCASE(), LCASE() 구문 (0) | 2013.10.10 |
SQL GROUP BY 구문 (0) | 2013.10.08 |
SQL SUM() 함수 (1) | 2013.10.07 |
SQL MAX(), MIN() 구문 (0) | 2013.10.04 |