오늘은 몰랐으면 내일은 알면 된다
2022-11-08 (5) 다중행 함수, GROUP BY 본문
| 함수 | 설명 |
| SUM | 지정한 데이터의 합 반환 |
| COUNT | 지정한 데이터의 개수 반환 COUNT() - NULL 제외하고 카운트 COUNT(*) - NULL 포함하고 카운트 |
| MAX | 지정한 데이터 중 최댓값 반환 |
| MIN | 지정한 데이터 중 최솟값 반환 |
| AVG | 지정한 데이터의 평균값 반환 |
SELECT SUM(DISTINCT SAL),
SUM(ALL SAL),
SUM(SAL)
FROM EMP;
ALL을 사용한 것과 아무것도 붙이지 않은 것의 결과는 같다. 그러나 DISTINCT를 붙이면, 같은 결과 값을 가진 데이터는 한번만 사용된다.(자주 사용되지 않음)
[GROUP BY]
SELECT [조회할 열1 이름], [열2 이름], ..., [열N이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하는 조건식]
GROUP BY [그룹화할 열을 지정(여러개 지정 가능)]
ORDER BY [정렬하려는 열 지정]
GROUP BY 에 명시하는 열은 여러 개 지정할 수 있다. 먼저 지정한 열로 대그룹을 나누고, 그 다음 지정한 열로 소그룹을 나눈다.
다중행 함수를 사용하지 않은 일반 열은 GROUP BY 절에 명시하지 않으면 SELECT 절에서 사용할 수 없다. 사용을 위해서는 서브쿼리를 활용해야 한다.
SELECT ENAME, DEPTNO, AVG(SAL)
FROM EMP
GROUP BY DEPTNO;
예를들어 위의 경우, DEPTNO를 기준으로 그룹화되어 DEPTNO, AVG(SAL)은 한 행으로 출력되지만, ENAME은 여러 행으로 출력되기 때문에 오류가 발생한다.
[HAVING]
: GROUP BY절이 존재할 때만 사용할 수 있다. 그룹화된 결과 값의 범위를 제한하는 데 사용한다.
SELECT [조회할 열1 이름], [열2 이름], ..., [열N이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하는 조건식]
GROUP BY [그룹화할 열을 지정(여러개 지정 가능)]
HAVING [출력 그룹을 제한하는 조건식]
ORDER BY [정렬하려는 열 지정]
[WHERE / HAVING]
: WHERE이 출력 행을 제한하는 데 반해, HAVING은 그룹화된 대상을 출력에서 제한한다.
WHERE이 GROUP BY와 HAVING을 사용한 데이터 그룹화보다 먼저 출력 대상이 될 행을 제한한다.
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
WHERE SAL <= 3000
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
예를들어 위의 경우, WHERE SAL <= 3000 을 통해 먼저 SAL이 3000을 초과하는 데이터를 결과에서 제외한다. 따라서 애초에 GROUP BY 대상이 될 수 없다.
이처럼, 그룹을 나누는 대상 데이터를 처음부터 제외하려고 할 때, WHERE절을 함께 사용한다.
'Java > JAVA 개발자 양성과정' 카테고리의 다른 글
| 2022-11-09 (2) 서브쿼리 Subquery (0) | 2022.11.09 |
|---|---|
| 2022-11-09 (1) JOIN (0) | 2022.11.09 |
| 2022-11-08 (4) 람다식(Lambda Expression) (0) | 2022.11.08 |
| 2022-11-08 (3) 정규 표현식(Regular Expression) (0) | 2022.11.08 |
| 2022-11-08 (2) 오라클 함수 - 형 변환 함수, NULL 처리 함수, CASE/DECODE (0) | 2022.11.08 |