Day36 :) 그룹함수

Nux·2021년 10월 27일
0

자바웹개발

목록 보기
37/105
post-thumbnail

그룹함수(다중행 함수)

  • 한꺼번에 여러개의 데이터를 함수로 입력하는 것
SELECT AVG(SALARY), SUM(MIN_SALARY)
FROM EMPLOYEES;
  • *를 사용하면 NULL값까지 출력되고, 컬럼값을 작성하면 NULL값은 제외됨
SELECT COUNT(*), COUNT(COMM)
FROM EMP;
-- COUNT(*): 12 / COUNT(COMM): 4
-- COUNT(*)는 NULL을 포함하고, COUNT(COMM)은 NULL을 포함하지 않음

GROUP BY절

  • 제시한 조건에 맞는 결과를 모아주는 키워드
  • 그룹함수와 함께 사용 가능
SELECT COUNT(*)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
-- DEPARTMENT_ID별로 SELECT절을 실행해줌
  • 그룹핑조건 중첩 적용 가능
SELECT COUNT(*)
FROM EMP
GROUP BY EMP_TYPE, DEPT_NO;
-- EMP_TYPE별로 묶은 후, DEPT_NO별로 묶어서 SELECT절 실행
  • SELECT절에 사용한 컬럼과 GROUP BY에 사용한 컬럼이 반드시 일치해야 하므로 주의
    • 그룹함수는 제외
SELECT DEPT_NO, JOB, AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPT_NO
-- 오류발생. GROUP BY와 SELECT가 일치하지 않음
SELECT DEPT_NO, JOB, AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPT_NO, JOB
-- GROUP BY와 SELECT가 일치하므로 정상 실행

HAVING절

  • 그룹함수의 조건식으로 사용
    • WHERE절은 그룹함수에 사용 불가
  • GROUP BY절과 함께 사용해야하며 단독 사용 불가능
SELECT DEPARTMENT_ID, COUNT(*)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING COUNT(*) <= 10;
SELECT DEPARTMENT_ID, COUNT(*)
FROM EMPLOYEES
WHERE HIRE_DATE >= '2005/01/01' AND HIRE_DATE < TO_DATE('2005/12/31')+1
GROUP BY DEPARTMENT_ID
HAVING COUNT(*) >= 10;
-- 일반컬럼은 WHERE절로 필터링

0개의 댓글