2015년 12월 4일 금요일

MySQL - 그룹화(GROUP BY, HAVING)


그룹화(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 보다 큰 년도의 값을 가져오면 위와 같은 결과가 나옵니다.


댓글 없음:

댓글 쓰기

JIRA Plugin - ScriptRunner 소개 #2

관련 글 소개 #1:  https://pineoc.blogspot.com/2019/03/scriptrunner-1.html ScriptRunner 소개 #2 지난 글에서는 Behaviours를 보았고 다음 내용인 콘솔, 리스너 등을 ...