Oracle DB_집계 함수

JW__1.7·2022년 8월 30일
0

DB 공부일지

목록 보기
14/27

집계 함수(그룹 함수)

  • 통계(합계, 평균, 최대, 최소, 개수 등)를 낼 때 사용
  • NULL값을 연산에서 제외
  • 종류
    SUM(칼럼) 칼럼 합계
    AVG(칼럼) 칼럼 평균
    MAX(칼럼) 칼럼 최대값
    MIN(칼럼) 칼럼 최소값
    COUNT(칼럼) 칼럼에 입력된 데이터의 개수

각 칼럼(KOR, ENG, MATH)의 합계

SELECT
       SUM(KOR)   -- 국어 합계
     , SUM(ENG)   -- 영어 합계
     , SUM(MATH)  -- 수학 합계  
     , SUM(KOR) + SUM(ENG) + SUM(MATH)
  FROM
       SAMPLE;

SUM(KOR, ENG, MATH)은 인수(arguments)가 3개이므로 불가능하다. (인수 1개여야 한다.)
SUM(KOR + ENG + MATH)은 KOR + ENG + MATH와 같은 연산 (SUM 함수를 잘못 사용한 예시)

각 칼럼(KOR, ENG, MATH)의 평균

SELECT
       AVG(KOR)    -- NULL 제외한 KOR의 평균
     , AVG(ENG)    -- NULL 제외한 ENG의 평균
     , AVG(MATH)   -- NULL 제외한 MATH의 평균
  FROM
       SAMPLE;

NULL값은 결시를 의미하므로 0점 처리함

SELECT
       AVG(NVL(KOR, 0))
     , AVG(NVL(ENG, 0))
     , AVG(NVL(MATH, 0))
  FROM
       SAMPLE;

각 칼럼(KOR, ENG, MATH)의 최대값

SELECT
       MAX(KOR)
     , MAX(ENG)
     , MAX(MATH)
  FROM
       SAMPLE;

각 칼럼(KOR, ENG, MATH)의 최소값

  • NULL값은 결시를 의미하므로 0점 처리함
SELECT
       MIN(NVL(KOR, 0))
     , MIN(NVL(ENG, 0))
     , MIN(NVL(MATH, 0))
  FROM
       SAMPLE;

국어 시험을 응시한 학생이 몇 명인가?

SELECT
       COUNT(KOR)
  FROM
       SAMPLE;

전체 학생은 몇 명인가? (전체 Row의 개수)

  • 특정 칼럼을 지정하지 않고 전체 칼럼(*)을 이용해서 전체 Row 개수를 구함
SELECT
       COUNT(*)
  FROM
       SAMPLE;

Q1 아래와 같이 나타내는 쿼리문을 작성하시오.
성명 국어 영어 수학 합계 평균
아무개 100 100 100 300 100
영숙 0 100 100 200 66.67
정수 100 0 100 200 66.67
지영 100 100 0 200 66.67

SELECT NVL(NAME, '아무개') AS 성명
    , NVL(KOR, 0) AS 국어
    , NVL(ENG, 0) AS 영어
    , NVL(MATH, 0) AS 수학
    , NVL(KOR, 0) + NVL(ENG, 0) + NVL(MATH, 0) AS 합계
    , (NVL(KOR, 0) + NVL(ENG, 0) + NVL(MATH, 0)) / 3 AS 평균
 FROM
      SAMPLE; 

0개의 댓글