..

Search

40) 그룹 함수

그룹 함수


그룹(aggregate) 함수

MySQL에서는 하나의 값이 아닌 값들의 집합에 대해서 동작하는 그룹(aggregate) 함수를 제공하고 있습니다.

 

MySQL에서 자주 사용되는 대표적인 그룹 함수는 다음과 같습니다.

 

1. COUNT()

2. MIN()과 MAX()

3. SUM()

4. AVG()

 

대부분의 그룹 함수는 NULL 값을 제외하고 동작한 결과를 반환합니다.

COUNT()

COUNT() 함수는 선택된 필드에서 특정 조건을 만족하는 레코드의 총 개수를 반환합니다.

만약 조건을 만족하는 레코드가 없다면, COUNT() 함수는 0을 반환합니다.

이때 중복된 값을 제외하려면, 필드 이름 앞에 DISTINCT 키워드를 사용하면 됩니다.

 

다음 예제는 Reservation 테이블의 총 레코드 개수를 구하는 예제입니다.

예제

 

SELECT COUNT(*) AS NumberOfRervation

FROM Reservation;

 

코딩연습 ▶ 

실행 결과


MIN()과 MAX()

MIN() 함수는 선택된 필드에 저장된 값 중 가장 작은 값을 반환합니다.

MAX() 함수는 선택된 필드에 저장된 값 중 가장 큰 값을 반환합니다.

 

다음 예제는 Customer 테이블의 Age 필드에 저장된 값 중 최솟값을 구하는 예제입니다.

예제

 

SELECT MIN(Age) AS MinAge

FROM Customer;

 

코딩연습 ▶ 

실행 결과

 

다음 예제는 Customer 테이블의 Name 필드에 저장된 값 중 최댓값을 구하는 예제입니다.

예제

 

SELECT MAX(Name) AS MaxName

FROM Customer;

 

코딩연습 ▶ 

실행 결과

 

위의 예제처럼 MIN() 함수와 MAX() 함수는 문자열 타입의 필드에서도 최솟값과 최댓값을 구할 수 있습니다.


SUM()

SUM() 함수는 선택된 숫자 타입의 필드에 저장된 값의 총 합을 반환합니다.

 

다음 예제는 Customer 테이블의 Age 필드에 저장된 값의 총 합을 구하는 예제입니다.

예제

 

SELECT SUM(Age) AS SumOfAge

FROM Customer;

 

코딩연습 ▶ 

실행 결과


AVG()

AVG() 함수는 선택된 숫자 타입의 필드에 저장된 값의 평균값을 반환합니다.

 

다음 예제는 Customer 테이블의 Age 필드에 저장된 값의 평균값을 구하는 예제입니다.

예제

 

SELECT AVG(Age) AS AverageOfAge

FROM Customer;

 

코딩연습 ▶ 

실행 결과


GROUP BY 절

GROUP BY 절은 선택된 레코드의 집합을 필드의 값이나 표현식에 의해 그룹화한 결과 집합을 반환합니다.

즉, GROUP BY 절은 하나의 그룹을 하나의 레코드로 반환하므로, 결과 집합의 크기를 줄여주는 역할을 합니다.

 

이러한 GROUP BY 절은 SELECT 문에서만 사용할 수 있으며, 앞서 살펴 본 그룹 함수를 사용할 때 자주 같이 사용됩니다.

문법

SELECT 필드이름, 그룹함수(필드이름)

FROM 테이블이름

[WHERE 조건]

GROUP BY 필드이름;

 

다음 예제는 Customer 테이블에서 각 나이별 회원수를 구하는 예제입니다.

예제

SELECT Age, COUNT(*) AS NumOfCustomer

FROM Customer

GROUP BY Age;

코딩연습 ▶ 

실행 결과

 

위의 예제처럼 GROUP BY 절에 사용된 필드의 이름은 반드시 SELECT 문에도 같이 명시되어야 합니다.


HAVING 절

HAVING 절은 SELECT 문의 WHERE 절처럼 GROUP BY 절에 의해 반환되는 결과 집합의 조건을 설정할 수 있게 해줍니다.

문법

SELECT 필드이름, 그룹함수(필드이름)

FROM 테이블이름

[WHERE 조건]

GROUP BY 필드이름

HAVING 조건;

 

다음 예제는 Customer 테이블에서 각 도시별 가장 나이가 많은 레코드 중 15살 이상의 레코드만을 선택하는 예제입니다.

예제

SELECT Address, Name, MAX(Age) AS MaxAge

FROM Customer

GROUP BY Address

HAVING MaxAge > 15;

코딩연습 ▶ 

실행 결과


연습문제