그룹화(GROUP BY, HAVING)
GROUP BY 절은 동일성을 기초하여 여러개의 행을 그룹화하고,
HAVING 절은 WHERE절과 유사한 기능을 가지며, 그룹의 조건을 지정합니다.
ex)
SELECT s.stu_no, s.stu_name, sum(f.fee_pay) FROM student s, fee f WHERE s.stu_no = f.stu_no GROUP BY s.stu_no;
이에 대한 결과 값은 아래에 있는 것 중 왼쪽과 같습니다.
(원래 데이터는 아래의 오른쪽과 같습니다. 일부의 모습입니다.)
중복된 것을 묶어서 SUM()을 이용하여 합으로 출력하면 위의 결과를 얻을 수 있습니다.
-HAVING 절
-GROUP BY 절은 FROM 절로부터 생성되는 결과의 행을 그룹화
-HAVING 절은 특별한 그룹 속성을 기초로 하여 행의 그룹을 선택
-HAVING 절에 있는 조건은 WHERE 절에 있는 일반적인 조건처럼 보인다.
-WHERE 절에 있는 조건 수식에서는 통계함수를 사용 불가능
-부속질의어에서는 통계함수 사용가능
-HAVING 절의 조건에 있는 수식은 통계함수를 사용가능
ex)
SELECT stu_no,fee_year
FROM fee
GROUP BY fee_year HAVING fee_year > 2005;
위의 Query는
GROUP BY 절과 HAVING을 사용해서 fee_year가 2005 초과한
stu_no, fee_year 값을 가져옵니다. (그룹화 해서)
결과 값은,
+----------+-------------+ | stu_no | fee_year | +----------+----------+ | 20001015 | 2006 | | 20001015 | 2007 | +----------+----------+
fee의 모든 데이터는 오른쪽과 같은데 group by, having을 사용하여
2005 보다 큰 년도의 값을 가져오면 위와 같은 결과가 나옵니다.
댓글 없음:
댓글 쓰기