코딩하는 문과생

[SQL] 5. Additional SELECT(3) 본문

프로그래밍/SQL

[SQL] 5. Additional SELECT(3)

코딩하는 문과생 2020. 1. 21. 11:57

# 그룹함수

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