코딩하는 문과생
[SQL] 5. Additional SELECT(3) 본문
# 그룹함수
SUM, AVG, MIN, MAX, COUNT...
(그룹함수는 NULL을 계산하지 않는다.)
-
SUM( [DISTINCT] expr )
-
AVG( [DISTINCT] expr )
-
MIN( expr )
-
MAX( expr )
-
COUNT( * | [DISTINCT] expr )
- GROUP BY
(GROUP BY에 명세된 컬럼은 SELECT절에 명세될 수 있다. 기본 컬럼은 불가)
//PARSING 순서
SELECT --4
FROM --1
WHERE --2
~~
GROUP BY --3
HAVING --3
# EX1)
SELECT DEPT_ID AS 부서
, ROUND(AVG(SALARY), -4) AS 평균급여
FROM EMPLOYEE
GROUP BY DEPT_ID
ORDER BY 1;
//***************************************
SELECT DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남', '3', '남', '여') AS 성별
, ROUND(AVG(SALARY), -4) AS 평균급여
FROM EMPLOYEE
GROUP BY DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남', '3', '남', '여')
ORDER BY 2;
# EX2)
SELECT EMP_NAME, DEPT_ID, COUNT(*)
FROM EMPLOYEE
GROUP BY EMP_NAME, DEPT_ID ;
SELECT EMP_NAME, DEPT_ID, COUNT(*)
FROM EMPLOYEE
GROUP BY ROLLUP( EMP_NAME, DEPT_ID ) ;
//ROLLUP 은 그룹에 대한 소계와 누적 총계를 출력해준다.
그리고 GROUP BY에는 컬럼 별칭(AS 로 쓰인 것)이나 컬럼 기술 순서(1 OR 2 등)는 사용할 수 없다.
# EX3)
SELECT MAX(SUM(SALARY))
FROM EMPLOYEE
GROUP BY DEPT_ID ;
// 18100000
SELECT DEPT_ID, MAX(SUM(SALARY))
FROM EMPLOYEE
GROUP BY DEPT_ID ;
// 오류
SELECT DEPT_ID, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_ID
HAVING SUM(SALARY) = ( SELECT MAX(SUM(SALARY)) FROM EMPLOYEE GROUP BY DEPT_ID );
// 90 18100000
SELECT DEPT_ID, SUM(SALARY)
FROM EMPLOYEE
WHERE SUM(SALARY) = 18100000
GROUP BY DEPT_ID
// 오류
// WHERE절에는 그룹함수 불가
# ORDER BY
- 내림차순과 오름차순이 있다.
- 1, 2 등으로 칼럼 순서를 부여할 수도 있다.
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 7. SET Operator (0) | 2020.01.22 |
---|---|
[SQL] 6. JOIN (0) | 2020.01.21 |
[SQL] 4. Additional SELECT(2) (0) | 2020.01.21 |
[SQL] 3. Additional SELECT (0) | 2020.01.20 |
[SQL] 2. SQL 기초 & SELECT (0) | 2020.01.20 |