ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [함수-다중행 함수]그룹 함수-집계,소계
    SQLD/함수 2023. 8. 26. 14:47

    그룹함수는 집계 함수와 소계 함수로 나뉜다.

     

    1.집계함수

    • 집계 함수는 일반적으로 GROUP BY절과 함께 사용된다.
      *테이블 전체가 하나의 그룹이 되는 경우 단독으로 사용가능
    • 집계함수는 WHERE절에 올 수 없다. HAVING절을 사용한다.
    COUNT(컬럼) SELECT COUNT(*) NULL을 포함한 전체행을 카운트하여 반환한다.
    SELECT COUNT(컬럼) NULL을 제외한 컬럼을 카운트하여 반환한다.
    SELECT COUNT(DISTINT 컬럼) NULL과 중복값을 제외한 컬럼을 카운트하여 반환
    SUM(컬럼명) SELECT SUM(컬럼명) 컬럼값들의 합계를 반환
    AVG(컬럼명) SELECT AVG(컬럼명) 컬럼값들의 평균을 반환
    MIN(컬럼명) SELECT MIN(컬럼명)컬럼값들의 최소값을 반환
    MAX(컬럼명) SELECT MAX(컬럼명)컬럼값들의 최대값을 반환

     

    2.소계 함수

    1️⃣ROLLUP

    • 소그룹 간 소계 및 총계를 구하는 함수
    • 총 합계만 구하려면 ROLLUP함수에 하나의 인수만 작성한다.
    • 괄호() 를 사용하여 하나로 묶어줄 수 있다.
    ROLLUP(컬럼) 컬럼으로 그룹핑
    총 합계
    ROLLUP(컬럼1,컬럼2) 컬럼1,컬럼2로 그룹핑
    컬럼1로 그룹핑한 소계
    총 합계
    ROLLUP(컬럼1,컬럼2,컬럼3) 컬럼1,컬럼2,컬럼3으로 그룹핑
    컬럼1,컬럼2로 그룹핑한 소계
    컬럼1로 그룹핑한 소계
    총 합계

    예제

    *프로그래머스에서 SQL연습문제에서 테스트하였습니다.

    1.테이블 구조 확인

    SELECT *
    FROM ANIMAL_INS

     

    2.GROUP BY절을 통해 집계함수를 작성해본다.

    SELECT ANIMAL_TYPE,COUNT(*)
    FROM ANIMAL_INS 
    GROUP BY ANIMAL_TYPE

     

    3.ROLLUP(컬럼)를 통해 총 합계를 구할 수 있다.

    SELECT ANIMAL_TYPE,COUNT(*)
    FROM ANIMAL_INS 
    GROUP BY ROLLUP(ANIMAL_TYPE)

     

    4.ROLLUP(컬럼1,컬럼2)를 통해 소계와 총 합계를 구한다.

    SELECT ANIMAL_TYPE,INTAKE_CONDITION,COUNT(*)
    FROM ANIMAL_INS 
    GROUP BY ROLLUP(ANIMAL_TYPE,INTAKE_CONDITION)

    • animal_type + intake_condition으로 그룹핑한다
    • animal_type로 그룹핑한 소계를 구한다.
    • 총 합계를 구한다.

    5.ROLLUP(컬럼1,컬럼2,컬럼3)를 통해  소계와 총 합계를 구한다.

    SELECT ANIMAL_TYPE,INTAKE_CONDITION,SEX_UPON_INTAKE,COUNT(*)
    FROM ANIMAL_INS 
    GROUP BY ROLLUP(ANIMAL_TYPE,INTAKE_CONDITION,SEX_UPON_INTAKE)

    • animal_type + intake_conditino + sex_upoon_intake 로 그룹핑한다.
    • animal_type + intake_condition으로 그룹핑한 소계를 구한다.
    • animal_type 으로 그룹핑한 소계를 구한다.
    • 총 합계를 구한다.

     

    2️⃣CUBE

    • 소그룹 간의 소계 및 총계를 다차원적으로 계산할 수 있는 함수
    • 조합 가능한 모든 그룹에 대한 소계를 반환한다.
    CUBE(컬럼) 컬럼으로 그룹핑
    총 합계
    *ROLLUP과 동일
    CUBE(컬럼1,컬럼2) 컬럼1,컬럼2로 그룹핑
    컬럼1로 그룹핑한 소계
    컬럼2로 그룹핑한 소계
    총 합계
    CUNBE(컬럼1,컬럼2,컬럼3) 컬럼1,컬럼2,컬럼3으로 그룹핑
    컬럼1,컬럼2 그룹핑한 소계
    컬럼1,컬럼3 그룹핑한 소계
    컬럼2,컬럼3 그룹핑한 소계
    컬럼1 그룹핑한 소계
    컬럼2 그룹핑한 소계
    컬럼3 그룹핑한 소계
    총 합계

    예제

    1.CUBE(컬럼)으로 총합계 구하기

    SELECT ANIMAL_TYPE,COUNT(*)
    FROM ANIMAL_INS 
    GROUP BY CUBE(ANIMAL_TYPE)

     

    2.CUBE(컬럼1,컬럼2)로 소계와 총 합계 구하기

    SELECT ANIMAL_TYPE,INTAKE_CONDITION,COUNT(*)
    FROM ANIMAL_INS 
    GROUP BY CUBE(ANIMAL_TYPE,INTAKE_CONDITION)

    • animal_type + intake_condition 그룹핑
    • animal_type 으로 그룹핑한 소계
    • intake_condition으로 그룹핑한 소계
    • 총 합계

    3.CUBE(컬럼1,컬럼2,컬럼3)로 소계와 총 합계 구하기

    SELECT ANIMAL_TYPE,INTAKE_CONDITION,SEX_UPON_INTAKE,COUNT(*)
    FROM ANIMAL_INS 
    GROUP BY CUBE(ANIMAL_TYPE,INTAKE_CONDITION,SEX_UPON_INTAKE)

    • animal_type + intake_condition + sex_upon_intake 로 그룹핑
    • animal_type + intake_condition 그룹핑한 소계
    • animal_type + sex_upon_intake 그룹핑한 소계
    • intake_condition + sex_upon_intake 그룹핑한 소계
    • animal_type 그룹핑한 소계
    • intake_condition 그룹핑한 소계
    • sex_upon_intake 그룹핑한 소계
    • 총 합계

     

    3️⃣GROUPING SETS

    • 지정한 특정 항목의 소계를 구한다.
    • 인자값으로 ROLLUP,CUBE를 사용할 수도 있다.
    • 아래는 간단한 사용 예시를 보여줌
    GROUPING SETS(컬럼1,()) 컬럼1에 대한 소계와 총 합계를 구한다.
    GROUPING SETS(컬럼1,컬럼2) 컬럼1 그룹핑한 소계
    컬럼2 그룹핑한 소계
    GROUPING SETS(컬럼1,컬럼2,()) 컬럼1 그룹핑한 소계
    컬럼2 그룹핑한 소계
    총 합계
    GROUPING SETS(컬럼1,ROLLUP(컬럼2,컬럼3)) 컬럼1 그룹핑
    컬럼2,3 그룹핑
    컬럼2 그룹핑
    총 합계

    4️⃣GROUPING

    • GROUPING은 ROLLUP,CUBE,GROUPING SETS등과 함께 쓰이며 소계를 나타내는 ROW를 구분할 수 있게해준다.
    • CASE와 함께 사용할 수 있다.
    -- 사용방법
    SELECT
        컬럼1,
        컬럼2,
        GROUPING(그룹화할_컬럼) AS 그룹화_표시
    FROM
        테이블
    GROUP BY
        그룹화할_컬럼, 컬럼1, 컬럼2;

    예시

    1.GROUPING으로 소계를 나타내는 로우를 구분해 준다.

    SELECT ANIMAL_TYPE,GROUPING(ANIMAL_TYPE),COUNT(*)
    FROM ANIMAL_INS 
    GROUP BY ROLLUP(ANIMAL_TYPE)

    2.case를 사용해서 이름을 지정하기

    SELECT 
        ANIMAL_TYPE,
        CASE GROUPING(ANIMAL_TYPE) 
            WHEN 1 THEN '모든 동물' 
            ELSE ANIMAL_TYPE 
            END as 동물,
            COUNT(*)
    FROM ANIMAL_INS 
    GROUP BY ROLLUP(ANIMAL_TYPE)

     

     

     

Designed by Tistory.