SQL : 집계함수(SUM, MAX, MIN..) GROUPBY와 HAVING

홍진우·2022년 3월 1일
0

SQL

목록 보기
2/4

오늘 알아볼 문법은 여러개의 row를 집계하여 하나의 결과를 나타낼때 사용한다.
기본적인 집계함수에는 AVG(평균값), MIN(최솟값), MAX(최댓값), SUM(합), COUNT(갯수)가 있다.

집계함수

SUM

SELECT SUM(salary) 
	FROM instructor 
    WHERE dept_name='Comp.Sci.'

MAX

SELECT MAX(DATETIME)
    FROM ANIMAL_INS

MIN

동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문

-- 코드를 입력하세요
SELECT MIN(DATETIME)
    FROM ANIMAL_INS

AVG

SELECT AVG(salary) 
	FROM instructor 
    WHERE dept_name='Comp.Sci.'

COUNT

SELECT COUNT(*)
    FROM ANIMAL_INS

DISTINCT(중복 제거)

count와 함께 사용하는 기능으로 COUNT()안의 변수 앞에 DISTINCT를 사용하면, 중복을 제거한다. 추가로, NULL인 이름을 가진 동물은 반영하지 않으므로 WHRER 조건을 함께 사용한다.

-- 코드를 입력하세요
SELECT COUNT(DISTINCT NAME)
    FROM ANIMAL_INS
    WHERE NAME IS NOT NULL

GROUP BY

GROUP BY

특정 컬럼을 그룹화 하는 GROUP BY
특정 컬럼을 그룹화한 결과에 조건을 거는 HAVING

--컬럼 그룹화
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;

--조건 처리 후에 컬럼 그룹화
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼;

--컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼 HAVING 조건식;


--조건 처리 후에 컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼 HAVING 조건식

--ORDER BY가 존재하는 경우
SELECT 컬럼 FROM 테이블 [WHERE 조건식]
GROUP BY 그룹화할 컬럼 [HAVING 조건식] ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...]

예제1


동물의 타입과 count를 SELECT하고,
이때 ANIMAL_TYPE 에 따라 GROUP BY한다.

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

예제2

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

SELECT NAME, COUNT(NAME)
    FROM ANIMAL_INS
    WHERE NAME IS NOT NULL
    GROUP BY NAME
    HAVING COUNT(NAME) >= 2
    ORDER BY NAME ASC

예제3

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

SELECT HOUR(DATETIME) AS 'HOUR', COUNT(DATETIME) AS 'COUNT'
    FROM ANIMAL_OUTS
    WHERE HOUR(DATETIME) >= 9 and HOUR(DATETIME) <= 19
    GROUP BY HOUR(DATETIME)
    ORDER BY HOUR(DATETIME) ASC

* WHERE랑 HAVING의 차이점
WHERE는 그룹화 하기 전이고, HAVING은 그룹화 후에 조건을 줌

DISTINCT

DISTINCT는 GROUP BY절과 마찬가지로 조회결과를 그룹으로 묶어서 그 결과를 가져옴
주로 UNIQUE한 컬럼을 조회할 경우 사용

GROUP BY절과 DISTINCT의 차이점

두 구절은 똑같이 그룹을 지어준다는 공통점이 있지만
차이점

  • GROUP BY는 결과물을 정렬해서 표현
  • DISTINCT는 결과물을 정렬하지 않음
--GROUP BY
SELECT칼럼 FROM 테이블 GROUP BY 칼럼명

--DISTINCT
SELECT DISTINCT 칼럼명 FROM 테이블명
profile
Yonsei Univ. Sports Industry studies/ Computer Science / Applied Statistics

0개의 댓글