강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
GROUP BY HAVING 절
조회 : 6,271  


GROUP BY HAVING 절
GROUP BY 절은 질의문의 SELECT 절에 하나 이상의 집계 함수가 주어진 경우에 사용된다.

질의 결과는 그룹으로 구성되는데 HAVING 절을 지정하면 GROUP BY 절로 구성되는 모든 그룹을 나열하는 것이 아니라, 지정된 조건을 만족하는 그룹만 조회되도록 조건을 설정할 수 있다.
1) 구문
GROUP BY expression_list [ HAVING search_condition]
expression_list : expression_list는 하나 이상의 컬럼 이름 또는 표현식으로 구성되며, 각각의 항목은 쉼표(,)로 구별되어야 한다.
search_condition : 질의 결과 그룹은 HAVING 선택 사항에서 지정한 search_condition에 의해 한정할 수 있다. 질의 결과로 여러 그룹이 생성되었을 경우에도 특정 논리 표현식을 만족하는 그룹만 표시되도록 제한할 수 있다.
2) 예제
다음은 1988년 이후 올림픽에서 각 해마다의 금메달 개수가 몇 개인지 조회하는 예제이다. participant 테이블에 대해 host_year별로 gold의 합을 구한다. 이 예제에서 테이블 participant 인스턴스는 5개의 서로 다른 host_year 값을 가지므로 5개의 그룹이 만들어지고, 각각의 host_year 값의 그룹에 대해 sum(gold) 값이 계산된다.
SELECT host_year, SUM(gold) FROM participant WHERE host_year >= 1988 GROUP BY host_year;
=== <Result of SELECT Command in Line 2> ===
host_year sum(gold)
===================
1988         241
1992         260
1996         271
2000         298
2004         301
5 rows selected.
다음은 국가별로 올림픽에 출전한 선수들을 묶고, 200명 이상 출전한 국가에 대해서 국가코드와 선수 수를 조회하는 예제이다. GROUP BY 절에 HAVING 절을 더하여 지정 조건에 만족하는 인스턴스를 조회할 수 있다. 위의 질의문에서는 count(code)가 200이 넘는 인스턴스에 한해 nation_code로 묶여 조회된다. WHERESELECT 절의 조건절이라고 한다면, HAVINGGROUP BY 절의 조건절이 된다.

GROUP BY 절에 컬럼뿐만 아니라 표현식을 나열할 수도 있다. 이 경우 표현식은 컬럼, 함수, 상수 값으로 구성될 수 있다.
SELECT nation_code, COUNT(code) FROM athlete
GROUP BY nation_code HAVING COUNT(code) > 200;
=== <Result of SELECT Command in Line 2> ===
nation_code  count(code)
========================
'AUS'         355
'CHN'         296
'CUB'         203
'GER'         417
'ITA'         226
'JPN'         205
'KOR'         263
'NED'         214
'RUS'         369
'USA'         810
10 rows selected.

[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1631


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
큐브리드