집계 함수... 이 녀석들은 데이터 분석 세계에서 진짜 마법사야! 수백만 줄의 데이터를 압축해서 한눈에 보기 쉽게 만들어주거든. 덕분에 우리는 개수 세기, 최소/최대값 찾기, 평균 내기 등등 여러 가지 작업을 할 수 있어. 자, 이제 하나씩 차근차근 알아보자.
집계 함수는 SQL에서 그룹으로 묶인 여러 줄에 대해 연산을 하고, 결과로 하나의 값을 반환하는 특별한 함수야. 비유하자면, 네가 아침마다 마시는 커피에 대한 모든 통계를 모으는 거랑 비슷해. 예를 들어, 일주일 동안 몇 잔 마셨는지, 설탕을 넣었는지, 며칠 연속 크림을 넣었는지 같은 거 말이야.
집계 함수로 해결할 수 있는 예시 문제들:
- 테이블에 있는 전체 레코드 개수 세기.
- 숫자 컬럼에서 최소값이나 최대값 찾기.
- 특정 컬럼의 값들 합계 구하기.
- 컬럼의 모든 값 평균 내기.
- 유니크한 값만 뽑아내기.
이게 "속에서" 어떻게 동작할까?
SQL은 SELECT로 데이터를 뽑은 다음에 집계 함수를 실행해. 예를 들어 SUM()이나 AVG()를 쓰면, SQL이 먼저 데이터를 모으고, 그 다음에 선택된 줄에 대해서만 계산을 해주는 거지.
PostgreSQL에서 자주 쓰는 집계 함수
이제 실전으로 들어가서, 우리 영웅 TOP5를 살펴보자:
COUNT()— 줄 개수 세기.SUM()— 숫자 컬럼 값들 합치기.AVG()— 평균값 구하기.MIN()— 최소값 찾기.MAX()— 최대값 찾기.
집계 함수 사용 예시
COUNT()로 줄 개수 세기
COUNT() 함수는 테이블 전체 줄 개수나, 특정 컬럼에서 비어있지 않은 값의 개수를 세는 데 써.
예시: 우리한테 students라는 테이블이 있다고 해보자. 여기에 학생 정보가 들어있어:
| id | name | age | grade |
|---|---|---|---|
| 1 | Otto Art | 20 | 85 |
| 2 | Maria Chi | 22 | 90 |
| 3 | Alex Lin | 21 | 78 |
| 4 | Anna Song | 23 | NULL |
학생 전체 인원수를 세어보자:
SELECT
COUNT(*) AS total_students
FROM students;
결과:
| total_students |
|---|
| 4 |
이제 grade가 있는 학생 수를 세어보자:
SELECT
COUNT(grade) AS students_with_grades
FROM students;
결과:
| students_with_grades |
|---|
| 3 |
왜 이렇게 나왔을까? COUNT(column)은 NULL 값을 무시하거든.
SUM()으로 합계 구하기
SUM() 함수는 숫자 컬럼의 모든 값을 더할 때 써.
예시: 학생들이 받은 점수의 총합을 구해보자.
SELECT
SUM(grade) AS total_grades
FROM students;
결과:
| total_grades |
|---|
| 253 |
참고: 컬럼에 NULL이 있으면, 합계 계산에서 그냥 무시돼.
AVG()로 평균값 구하기
AVG() 함수는 숫자 컬럼의 모든 값의 평균을 계산해.
예시: 학생들의 평균 점수를 구해보자.
SELECT
AVG(grade) AS average_grade
FROM students;
결과:
| average_grade |
|---|
| 84.33 |
봤지? NULL은 또 무시됐어.
MIN()과MAX()로 최소/최대값 찾기
가끔은 제일 작은 값이나 제일 큰 값을 찾아야 할 때가 있어. 그럴 때 MIN()이랑 MAX()를 쓰면 돼.
예시: 가장 어린 학생과 가장 나이 많은 학생을 찾아보자.
SELECT
MIN(age) AS youngest_student,
MAX(age) AS oldest_student
FROM students;
결과:
| youngest_student | oldest_student |
|---|---|
| 20 | 23 |
이 함수들에 대해서는 다음 강의에서 더 자세히 다룰 거야.
NULL과 친해지기
NULL에 대한 별도 강의가 곧 있을 거지만, 아주 짧게 말하면 NULL은 값이 없다는 뜻이야. 아무것도 없음. 텅 빔. 그냥 '널' 그 자체!
예를 들어, students 테이블이 있다고 해보자. 학생 정보가 들어있어:
| id | name | age | grade | hobbie |
|---|---|---|---|---|
| 1 | Otto Art | 20 | 85 | |
| 2 | Maria Chi | 22 | 90 | 댄스 |
| 3 | Alex Lin | 21 | 78 | |
| 4 | Anna Song | 23 |
이름과 나이는 항상 있지만, 점수랑 취미는 없을 수도 있어. 만약 셀에 아무 값도 없으면, 그 셀은 NULL을 포함한다고 해. NULL은 숫자도 아니고, 문자열도 아니고, 그냥 어떤 값도 없다는 특별한 코드야.
GO TO FULL VERSION