본문 바로가기

Archived(CSE Programming)/SQL(Oracle)

SQL_Additional_SELECT_그룹 함수

# 주요 그룹 함수 

그룹 함수는 NULL 값을 계산하지 않는다!

  • SUM
  • AVG > NULL을 제외하므로 결과 값이 달리질 수 있다
  • MIN > ANY 타입 가능
  • MAX > ANY 타입 가능
  • COUNT

# SUM ( [DISTINCT] expr)

> 필요에 따라서 이렇게 표현식을 만들 수 있다

 

# AVG

> AVG 는 NULL을 고려하지 않으므로 결과값이 달라질수 있다

그래서 AVG(NVL(COL, 0)) 등과 같은 처리 고려해야 한다

 

# MIN / MAX

 

# COUNT

Result Set을 세는 것이 일반적이다

 

그룹 함수를 잘 활용하려면 GROUP BY를 잘 활용해야 한다

구문의 parsing 순서는 다음과 같다

SELECT -- 5
FROM -- 1
WHERE -- 2
GROUP BY -- 3
HAVING -- 4

GROUP BY 절과 함께 사용하려면 GROUP BY 절이 아닌 일반 절을 가져올 수 없다

SELECT 		DEPT_ID
              , MIN(SALARY)
              , MAX(SALARY)
              , SUM(SALARY)
FROM		EMPLOYEE
GROUP BY	DEPT_ID;

SELECT 절에 기술한 컬럼 중, 그룹 함수에 사용되지 않은 컬럼은 GROUP BY 절에 반드시 기술되어야 함

반대로 GROUP BY 절로 사용한 것들은 SELECT 절에 사용할 수 있다

-- 표현식을 통해 GROUP BY 묶기
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;

GROUP BY를 여러 개 활용하여 묶으면 COMPOSITE KEY가 되는 것

ROLLUP() 함수 활용시 각 그룹별 합계에 대해서 재정리

-- COMPOSITE GROUP BY
-- ROLLUP
SELECT		EMP_NAME, DEPT_ID, COUNT(*)
FROM		EMPLOYEE
GROUP BY	ROLLUP( EMP_NAME, DEPT_ID);

GROUP BY HAVING 절

ORDER BY COLUMN 정렬기준

 

CF. DATA MODELING

다대다 관계 / 정규화 두 가지의 모델링

 

'Archived(CSE Programming) > SQL(Oracle)' 카테고리의 다른 글

SQL_SET_SubQuery  (0) 2020.01.22
SQL_JOIN  (0) 2020.01.21
SQL_Additional_SELECT_단일 행 함수  (0) 2020.01.20
SQL_SELECT  (0) 2020.01.20
SQL_DB의 기본  (0) 2020.01.20