wisePocket

[MySQL] 그룹 함수, Group by절, Having 절 본문

Database/MySQL - RDBMS

[MySQL] 그룹 함수, Group by절, Having 절

ohnyong 2023. 8. 8. 09:46

MySQL 유용한 함수 및 문법

조건을 설정 할 때 name = 'Lucy'와 같이 단일 조건인 경우엔 = 연산자로 표기하지만 조건이 다수 나타날 땐 name in('Lucy', ...) 처럼 여러개를 나열하는 것이 보기 좋았다.

 

이 외에 여러가지 방법들이 있어서 하나씩 살펴보았다.


1. 그룹 함수(MySQL Numeric Functions)

COUNT(), MAX(), MIN(), AVG(), SUM(), VRIANCE(), STDDEV()

통계치와 관련된 함수들이다. 갯수, 횟수, 최소값, 최대, 합계, 분산, 표준편차 등을 컬럼을 지정하여 구할 수 있다.
반드시 1개의 값을 반환한다.
NULL값이 무시된다.
GROUP BY 절과 함께 사용되어야만 한다. 

함수명 기능 사용
 COUNT  행의 수를 계산한다.   COUNT(컬럼 | *) 
 MAX  값들 중에 최대 값을 반환한다.   MAX(컬럼) 
 MIN  값들 중에 최소 값을 반환한다.   MIN(컬럼) 
 AVG  평균 값을 계산한다.   AVG(컬럼) 
 SUM  총 합계를 계산한다.   SUM(컬럼)
 VARIANCE  분산을 계산한다.   VARIANCE(컬럼) 
 STDDEV  표준편차를 계산한다.   STDDEV(컬럼) 
동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.


-- 코드를 입력하세요
#가장 먼저 = DATETIME
SELECT MIN(DATETIME) FROM ANIMAL_INS

 

2. GROUP BY 절

특정 속성을 기준으로 그룹화 하여 검색할 때 그룹화 할 속성을 지정
GROUP BY 절은 반드시 그룹함수와 함께 쓰이며 그룹 함수의 결과 값은 GROUP BY 절에 기술된 컬럼의 항목들의 행의 개수에 의해 결정

-- 코드를 입력하세요
SELECT 
        NAME,
        IF(COUNT(NAME)>1,COUNT(NAME),NULL) AS COUNT
FROM
        ANIMAL_INS
GROUP BY
        NAME
HAVING
        COUNT(NAME)>=2
ORDER BY
        NAME ASC

 

~별로 구분하라, ~들의 같이 해석되면 사용할 수 있다.

3. HAVING 절

HAVING 절은 해석상 WHERE 절과 동일하다. 단 조건 내용에 그룹 함수를 포함하는 것만을 포함한다.

일반 조건은 WHERE 절에 기술하지만 그룹 함수를 포함한 조건은 HAVING 절에 기술한다.

<기본 구조>

SELECT [DISTINCT] 컬럼, 그룹 함수(컬럼)

FROM 테이블명

[WHERE 조건]

[GROUP BY Group대상]

[HAVING 그룹 함수 포함 조건]

[ORDER BY 정렬대상 [ASC/DESC]]
  • HAVING 절은 GROUP BY 절 뒤에 기술한다.
  • HAVING 절의 조건은 그룹 함수를 포함해야 한다.

-- 코드를 입력하세요
SELECT 
        NAME,
        IF(COUNT(NAME)>1,COUNT(NAME),NULL) AS COUNT
FROM
        ANIMAL_INS
GROUP BY
        NAME
HAVING
        COUNT(NAME)>=2
ORDER BY
        NAME ASC