최댓값을 구하는 MAX 함수와 최솟값을 구하는 MIN 함수
MAX([DISTINCT, ALL 중 하나를 선택하거나 아무 값도 지정하지 않음(선택)]
[최댓값을 구할 열이나 연산자, 함수를 사용한 데이터(필수)])
OVER(분석할 때 사용할 여러 문법 지정)(선택)
MIN([DISTINCT, ALL 중 하나를 선택하거나 아무 값도 지정하지 않음(선택)]
[최솟값을 구할 열이나 연산자, 함수를 사용한 데이터(필수)])
OVER(분석할 때 사용할 여러 문법 지정)(선택)
-- 숫자 데이터에서 MAX,MIN 함수 사용하기
SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO = 10;
SELECT MIN(SAL)
FROM EMP
WHERE DEPT NO = 10;
-- 날짜 데이터에 MAX,MIN 함수 사용하기
SELECT MAX(HIREDATE)
FROM EMP
WHERE DEPTNO = 20;
SELECT MIN(HIREDATE)
FROM EMP
WHERE DEPTNO = 20;
평균값을 구하는 AVG 함수
숫자 또는 숫자로 암시적 형 변환할 수 있는 데이터만 사용 가능.
AVG([DISTINCT, ALL 중 하나를 선택하거나 아무 값도 지정하지 않음(선택)]
[평균값을 구할 열이나 연산자, 함수를 사용한 데이터(필수)])
OVER(분석할 때 사용할 여러 문법 지정)(선택)
SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO = 30
;
SELECT AVG(DISTINCT SAL)
FROM EMP
WHERE DEPTNO = 30;
결괏갑을 원하는 열로 묶어 출력하는 GROUP BY절
GROUP BY: 그룹화할 열 또는 데이터지정 필수 - 특정 열 또는 데이터를 기준으로 데이터를 그룹으로 묶음. 별칭을 인식하지 못하니 열 이름이나 연산식을 그대로 지정해야 함.
SELECT [조회할 열1 이름], [열2 이름],...[열n 이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하는 조건식]
GROUP BY [그룹화할 열을 지정(여러 개 지정할 수 있음)]
ORDER BY [정렬할 열 지정]
SELECT AVG(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO;
-- 부서 번호와 직책별 평균 급여로 정렬하기
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
-- 부서 번호와 직책별 평균 급여로 정렬하기 SELECT DEPTNO, JOB, AVG(SAL) FROM EMP GROUP BY DEPTNO, JOB ORDER BY DEPTNO, JOB;
-- 오류
-- GROUP BY절에 없는 열을 SELECT절에 포함할 때
SELECT ENAME, DEPTNO, AVG(SAL)
FROM EMP
GROUP BY DEPTNO;
-- DEPTNO를 기준으로 그룹화하여 DEPTNO열과 AVG(SAL)열은 한 행으로 출력하지만,
-- ENAME 열은 여러 행으로 구성되어 열별 데이터 수가 달라져 출력할 수 없기 때문.
만든 그룹을 조건별로 출력할 때 사용하는 HAVING 절
HAVING절은 SELECT문에 GROUP BY절이 있을때만 사용할 수 있으며, 이 절은 GROUP BY절로 그룹화한 결괏값의 범위를 제한하는 데 사용.
SELECT [조회할 열1 이름], [열2 이름],...[열n 이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하는 조건식]
GROUP BY [그룹화할 열을 지정(여러 개 지정할 수 있음)]
HAVING [출력 그룹을 제한하는 조건식]
ORDER BY [정렬할 열 지정]
** HAVING - 조건식 필수, GROUP BY정릉 사용해 그룹화한 결과 중 출력 그룹을 선별하는 조건식을 지정.
HAVING 절은 GROUP BY절이 있을 때 이 절 바로 뒤에 작성함.
별칭 사용 불가.
-- GROUP BY절과 HAVING절을 사용하여 출력하기
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
HAVING절을 사용할 때 유의점
WHERE절은 출력 대상 행을 제한하고, HAVING절은 그룹화한 대상을 출력에서 제한하므로 쓰임새는 전혀 다름. 하지만 둘다 조건식을 지정하고 조건식이 참인 결과만 출력한다는 점은 비슷함.
**WHERE절과 HAVING절의 차이점
HAVING 절을 처음 사용한 SELECT문에 WHERE절 조건을 추가하여 실행.
WHERE절을 사용하지 않고 HAVING절만 사용한 경우
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
-- WHERE절과 HAVING절을 모두 사용한 경우
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
WHERE SAL <= 3000
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;'SQL' 카테고리의 다른 글
| [SQL] SQL 속 또 다른 SQL, 서브쿼리_1 (0) | 2025.12.01 |
|---|---|
| [SQL] 조인 (0) | 2025.12.01 |
| [SQL] 다중행 함수와 데이터 그룹화_1 (0) | 2025.12.01 |
| [SQL] 데이터 처리와 가공을 위한 오라클 함수_2 (0) | 2025.11.30 |
| [SQL] 데이터 처리와 가공을 위한 오라클 함수_1 (0) | 2025.11.30 |