# 집계함수

SQL에서 통계내는것도 되게 쉽게 할 수 있는데

SQL의 집계함수 (aggregate function) 를 사용하면 됩니다.

집계함수는 **특정 컬럼의 합계, 평균, 최댓값** 등 통계를 내주는 함수인데 엑셀함수랑 사용법이&#x20;

비슷하고 쉬움&#x20;

그래서 오늘은 카드회사 취직했다고 가정하고 돈 많이쓰는 핵심 고객을 색출해봅시다.&#x20;

이번달의 고객별 카드 사용금액 테이블입니다.&#x20;

{% file src="<https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FBDvmaxULK0yGQldejqjP%2Fcard.csv?alt=media&token=93a6f2ce-95c9-41a8-ae3a-2548cfdb5ea4>" %}

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FKy1QibzpmeABxJdq8pf3%2FScreenshot_21.png?alt=media&#x26;token=e6192ebc-6756-4012-b54f-8dc1a738e194" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FrknUKokN1BuCrW7iKuh8%2FScreenshot_20.png?alt=media&#x26;token=48bd11a4-e31f-458e-840c-6e3fd777a3e4" alt=""><figcaption></figcaption></figure>

### <mark style="color:yellow;">**1. MAX() MIN() 으로 최대 최소 찾기**</mark>

현재 테이블에서 가장 돈 많이 쓴 사람을 찾아서 상을 줍시다.&#x20;

숫자가 들어있는 컬럼에서 최댓값을 찾고 싶으면 MAX() MIN() 함수 쓰면 됩니다.&#x20;

소괄호 붙어있는건 전부 함수라고 부릅니다

MAX(컬럼명)을 쓰면 해당 컬럼의 최댓값이 들어있는 행만 출력해줍니다.

MIN(컬럼명)을 쓰면 해당 컬럼의 최솟값이 들어있는 행만 출력해줍니다.

```sql
SELECT MAX(사용금액) FROM card 
SELECT MIN(사용금액) FROM card 
```

### <mark style="color:yellow;">2. AVG()로  평균내기</mark>

```sql
SELECT AVG(연체횟수) FROM card 
```

### <mark style="color:yellow;">**3. 합 구하려면 SUM()**</mark>

```sql
SELECT SUM(사용금액) FROM card 
```

### <mark style="color:yellow;">**4. 행의 갯수를 세고 싶으면 COUNT() 함수**</mark>

```sql
SELECT COUNT(사용금액) FROM card 
```

### <mark style="color:yellow;">**응용1. 컬럼명을 바꾸고 싶으면 AS**</mark>

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FMbOJMjpfYbPbjtaU36pi%2FScreenshot_22.png?alt=media&#x26;token=09c46055-3e39-433b-bea0-bbc3447102bd" alt=""><figcaption></figcaption></figure>

```sql
SELECT MAX(사용금액) AS 최대사용금액 FROM card 
```

컬럼명 뒤에 **AS 원하는단어** 사용하면 됩니다.

그럼 컬럼명을 원하는 단어로 바꿔줍니다.&#x20;

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FqOcdEzeSQpdQjML9VKKx%2FScreenshot_23.png?alt=media&#x26;token=d1d0b5e9-bf92-4dba-8a80-f10e76938bd0" alt=""><figcaption></figcaption></figure>

다른 단어로 치환하는걸 전문용어로 alias 라고 합니다.&#x20;

주의점은 AS 뒤에 작명할 때 실제 있는 컬럼명 말고 다른 단어를 작명하는게 좋습니다.

안그러면 컴퓨터가 헷갈린다고 뭐라그럴 수도 있음&#x20;

&#x20;

아무튼 쓰고싶을 때 쓰면 되는데

나중에 AS 문법을 꼭 필요로하는 곳들이 있으니 사용법은 잘 외워둡시다.

### <mark style="color:yellow;">**응용2. 당연히 필터링 후에 통계낼 수도 있음**</mark>&#x20;

고객등급이 vip인 사람들만 뽑아서 통계를 내고 싶으면 어쩌죠?

그럼 당연히 vip인 사람만 필터링하고 통계내면 됩니다.&#x20;

예시로 "고객등급이 vip인 사람의 평균 사용금액"을 구해봅시다.&#x20;

```squirrel
SELECT AVG(사용금액) FROM card WHERE 고객등급 = 'vip' 
```

그래서 "필터링한 결과에서 통계를 낼 수 있다" 이걸 잘 기억해둡시다.

나중에 실제 데이터 가지고 분석할 때도 중요한 점인데&#x20;

전체를 가지고 통계내는 것 보다

**특정 그룹의 통계를 내는게** 대부분 더 의미찾기가 쉽습니다.

결과가 입맛에 맞게 나올 때 까지 그룹의 범위를 맘대로 조작할 수 있으니까요.&#x20;

### <mark style="color:yellow;">**응용3. 중복제거  DISTINCT**</mark>

컬럼을 출력할 때 왼쪽에 DISTINCT 키워드를 부착해줄 수 있는데

이러면 각 행에 있는 값들 중에 유니크한 값만 골라서 필터링해줍니다.&#x20;

쉽게말하면 중복데이터는 제거해서 보여달라는 뜻임&#x20;

```sql
SELECT DISTINCT 연체횟수 FROM card 
SELECT AVG(DISTINCT 연체횟수) FROM card 
```

오늘의 결론은&#x20;

SELECT MIN(컬럼명) / MAX(컬럼명) / COUNT(컬럼명) 등을 쓰면

그 **컬럼의** **통계를 내주고** 그 값을 그 자리에 남겨줍니다.

간단한 통계가 필요하면 사용합시다. &#x20;

**Q1. 최대 결제횟수와 최소 결제횟수를 출력해봅시다.**&#x20;

**Q2. 고객등급이 vip인 사람들의 '평균 결제횟수'와**

**고객등급이 vip인 사람들의 '사용금액 총 합계'를 구해봅시다.**&#x20;

**Q3. 연체횟수가 1회 이하인 사람은 몇명일까요?** &#x20;
