-
[함수-다중행 함수]그룹 함수-집계,소계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)
'SQLD > 함수' 카테고리의 다른 글
[함수-다중행 함수]윈도우 함수 (0) 2023.08.28 [함수-단일행 함수]NULL관련 함수,CSAE구문 (0) 2023.08.23 [함수-단일행함수]날짜함수와 변환함수 (0) 2023.08.23 [함수-단일행함수]숫자형 함수 (0) 2023.08.23 [함수-단일행함수]문자형 함수 (0) 2023.08.22 - 집계 함수는 일반적으로 GROUP BY절과 함께 사용된다.