본문 바로가기

Database

[SQL] 함수 - 그룹함수

 SQL 함수 (FUNCTION)

자바의 메소드와 비슷한 역할
전달된 값들을 읽은 후, 메서드에 맞는 계산결과를 반환
1) 단일행함수: n개의 값을 읽어서 n개의 값 리턴
2) 그룹함수: n개의 값을 읽어서 1개의 값 리턴
     ==> 단일행 함수와 그룹함수는 반환결과의 행수가 다르므로
            일반적으로 하나의 쿼리문에 함께 사용할 수 없음!

그룹 함수 

1. SUM

SUM(숫자타입컬럼) : 해당 컬럼값들의 총 합계를 반환
-- 총 사원들의 급여 합계


SELECT SUM(SALARY)
FROM EMPLOYEE;

-- 부서코드 D5인 사람들의 총 급여 합
SELECT SUM(SALARY)
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5';

--남자사원들의 총 급여
SELECT SUM(SALARY)
FROM EMPLOYEE
WHERE SUBSTR(EMP_NO, 8, 1) =1;

2. AVG 

 - AVG (숫자타입컬럼) : 해당 컬럼값들의 평균값을 구해서 반환

SELECT ROUND (AVG(SALARY)) , '원' AS "월급평균"
FROM EMPLOYEE;

3. MIN/MAX

 MIN: 해당 컬럼값들중최소값을 반환
   전체 사원중에서 최저급여
    MAX : 최댓값 반환

 

SELECT MIN(SALARY), MIN(HIRE_DATE), MIN(EMP_NAME)
FROM EMPLOYEE;
SELECT MAX(SALARY), MIN(HIRE_DATE), MIN(EMP_NAME)
FROM EMPLOYEE;

 

4. COUNT: 조회된 행 갯수를 세서 반환

-COUNT(*) : 조회된 모든 행 갯수 반환
-COUNT(컬럼명) : NULL이 아닌 것만 카운트, 조회된 모든 행 갯수 반환
-COUNT(DISTINCT 컬럼명) : 중복 값이 있을 경우 하나로만 카운트,  조회된 모든 행 갯수 반환
-- 전체 사원 수
*/
SELECT COUNT(*) AS "전체사원수"
FROM EMPLOYEE;


-- 여자사원수만 조회
SELECT COUNT (*)
FROM EMPLOYEE
WHERE (SUBSTR(EMP_NO, 8, 1) = 2) ;

-- 부서배치가 완료된 사원수
SELECT COUNT(*)
FROM EMPLOYEE 
WHERE DEPT_CODE IS NOT NULL;  -- 왜 != 를 IS NOT 대신 쓰면 안되징?
                              -- NULL은 숫자도 문자도 아니므로 NULL과 비교하려면
                              -- IS NULL, IS NOT NULL을 써야함
                              -- 또한 NULL과 더하거나 곱하거나 등등 모든 연산의 결과는 NULL 처리됨

--현재 사원들이 속해있는 부서의 갯수
SELECT COUNT(DISTINCT DEPT_CODE)
FROM EMPLOYEE;