📊 [SQL 프로젝트] 제20장 GROUP BY와 MIN/MAX - 가장 큰 값과 가장 작은 값 찾기
제20장 GROUP BY와 MIN/MAX - 가장 큰 값과 가장 작은 값 찾기
📚 집계 함수 활용 시리즈
① COUNT
② SUM
③ AVG
④ MIN / MAX ← 현재
⑤ 여러 집계 함수를 함께 사용하기
지금까지는
- 개수(COUNT)
- 합계(SUM)
- 평균(AVG)
을 계산했습니다.
이번 장에서는
가장 큰 값(MAX) 과
가장 작은 값(MIN) 을 찾는 방법을 배워 보겠습니다.
오늘의 질문
상품관리팀에서 다음과 같이 질문했습니다.
"가장 비싼 상품은 얼마인가요?"
잠시 후 다른 직원이 묻습니다.
"가장 저렴한 상품은 얼마인가요?"
이번에는
평균도,
합계도 아닙니다.
가장 큰 값
또는
가장 작은 값
을 찾아야 합니다.
이때 사용하는 함수가
MAX()와 MIN()입니다.
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- MAX() 함수의 역할을 설명할 수 있다.
- MIN() 함수의 역할을 설명할 수 있다.
- GROUP BY와 함께 사용할 수 있다.
- 실무에서 최고값과 최저값을 찾을 수 있다.
20-1. MAX()와 MIN()이란 무엇일까요?
다음과 같은 가격이 있습니다.
| 상품 | 가격 |
| A | 18 |
| B | 42 |
| C | 27 |
| D | 15 |
이때
MAX()
↓
42
가 됩니다.
반대로
MIN()
↓
15
가 됩니다.
즉,
MAX는
가장 큰 값을,
MIN은
가장 작은 값을 반환합니다.
먼저 실행해 봅시다.
SELECT MAX(Price)
FROM Products;
실행 결과(예)
| MAX(Price) |
| 263.50 |
Products 테이블에서
가장 비싼 상품 가격을 찾았습니다.
이번에는
SELECT MIN(Price)
FROM Products;
실행 결과(예)
| MIN(Price) |
| 2.50 |
가장 저렴한 상품 가격입니다.
잠깐 생각해 보기
지금까지 배운 집계 함수를 비교해 보면
| 함수 | 의미 |
| COUNT() | 개수 |
| SUM() | 합계 |
| AVG() | 평균 |
| MAX() | 최고값 |
| MIN() | 최저값 |
학생들은
이 다섯 개를 하나의 묶음으로 기억하면 됩니다.
20-2. GROUP BY와 함께 사용하기
이번에는
카테고리별 최고 가격을 계산해 보겠습니다.
SELECT CategoryID,
MAX(Price) AS HighestPrice
FROM Products
GROUP BY CategoryID;
실행 결과(예)
| CategoryID | HighestPrice |
| 1 | 81.00 |
| 2 | 43.90 |
| 3 | 97.00 |
| ... | ... |
각 카테고리에서
가장 비싼 상품 가격을 계산했습니다.
이번에는
최저 가격입니다.
SELECT CategoryID,
MIN(Price) AS LowestPrice
FROM Products
GROUP BY CategoryID;
각 카테고리의
가장 저렴한 상품 가격이 출력됩니다.
SQL을 한 줄씩 읽어 보기
SELECT CategoryID,
MAX(Price) AS HighestPrice
FROM Products
GROUP BY CategoryID;
SELECT CategoryID
↓
카테고리를 출력합니다.
MAX(Price)
↓
가장 비싼 가격을 찾습니다.
FROM Products
↓
Products 테이블에서 데이터를 가져옵니다.
GROUP BY CategoryID
↓
카테고리별로 묶습니다.
즉,
카테고리별 최고 가격을 계산하라.
라는 의미입니다.
20-3. HAVING과 함께 사용하기
최고 가격이
100달러 이상인 카테고리만 출력해 보겠습니다.
SELECT CategoryID,
MAX(Price) AS HighestPrice
FROM Products
GROUP BY CategoryID
HAVING MAX(Price) >= 100;
이번에는
최저 가격이
10달러 이하인 카테고리도 찾을 수 있습니다.
SELECT CategoryID,
MIN(Price) AS LowestPrice
FROM Products
GROUP BY CategoryID
HAVING MIN(Price) <= 10;
20-4. ORDER BY와 함께 사용하기
SELECT CategoryID,
MAX(Price) AS HighestPrice
FROM Products
GROUP BY CategoryID
ORDER BY HighestPrice DESC;
가장 비싼 상품이 있는 카테고리부터 출력됩니다.
실무에서는
GROUP BY
↓
MAX()
↓
ORDER BY
조합도 자주 사용합니다.
💡 잠깐! 이것도 알아두세요
MAX()와 MIN()은
가격뿐 아니라
다양한 데이터에서 사용할 수 있습니다.
예를 들면
- 최고 점수
- 최저 점수
- 가장 빠른 주문일
- 가장 늦은 주문일
- 가장 큰 수량
등입니다.
특히
날짜(Date)도 비교할 수 있다는 점을 기억해 두세요.
자주 하는 실수
① MAX()가 가장 비싼 상품 이름도 함께 가져온다고 생각한다.
SELECT MAX(Price)
FROM Products;
이 SQL은
가격만 알려 줍니다.
상품 이름은 출력하지 않습니다.
상품 이름까지 알고 싶다면
다음에 배울 JOIN이나 서브쿼리가 필요할 수도 있습니다.
② MAX()와 ORDER BY를 같은 기능이라고 생각한다.
MAX()
↓
가장 큰 값 하나를 찾습니다.
ORDER BY DESC
↓
큰 값부터 모두 정렬합니다.
둘은 전혀 다른 기능입니다.
③ GROUP BY를 빼먹는다.
카테고리별 최고 가격을 계산하려면
반드시
GROUP BY CategoryID;
가 필요합니다.
④ HAVING 대신 WHERE를 사용한다.
집계 함수는
HAVING에서 조건을 지정합니다.
실무에서는 어떻게 사용할까요?
회사에서는
MAX()와 MIN()을 이용하여
- 최고 판매 상품
- 최저 판매 상품
- 가장 오래된 주문
- 가장 최근 주문
- 최고 점수
- 최저 점수
등을 자주 분석합니다.
특히
날짜 데이터와 함께 사용하는 경우가 매우 많습니다.
실습
실습 1
Products 테이블에서
가장 비싼 상품 가격을 조회하세요.
SELECT MAX(Price)
FROM Products;
실습 2
가장 저렴한 상품 가격을 조회하세요.
SELECT MIN(Price)
FROM Products;
실습 3
카테고리별 최고 가격을 조회하세요.
SELECT CategoryID,
MAX(Price)
FROM Products
GROUP BY CategoryID;
실무 미션
당신은 상품관리팀 직원입니다.
팀장님이
"카테고리별 최고 가격과 최저 가격을 한 번에 보고 싶습니다."
라고 요청했습니다.
다음 항목을 출력하세요.
- CategoryID
- 최고 가격
- 최저 가격
힌트)
MAX()와 MIN()을 함께 사용할 수 있습니다.
핵심 정리
✔ MAX()는 가장 큰 값을 찾는 집계 함수이다.
✔ MIN()은 가장 작은 값을 찾는 집계 함수이다.
✔ GROUP BY와 함께 사용하면 그룹별 최고값과 최저값을 계산할 수 있다.
✔ 날짜(Date) 데이터에도 사용할 수 있다.
대부분의 교재는 집계 함수를 각각 설명하고 끝나지만, 실제 업무에서는 다음과 같이 여러 집계 함수를 동시에 사용합니다.
SELECT CategoryID,
COUNT(*) AS ProductCount,
SUM(Price) AS TotalPrice,
AVG(Price) AS AveragePrice,
MAX(Price) AS HighestPrice,
MIN(Price) AS LowestPrice
FROM Products
GROUP BY CategoryID;
이 SQL 하나에는 지금까지 배운 다섯 가지 집계 함수와 GROUP BY가 모두 담겨 있습니다.
연습 문제
기본 문제
- MAX() 함수의 역할을 설명하세요.
- MIN() 함수의 역할을 설명하세요.
- MAX()와 ORDER BY DESC의 차이를 설명하세요.
응용 문제
- Products 테이블에서 CategoryID별 최고 가격을 구하는 SQL을 작성하세요.
- CategoryID별 최저 가격을 구하는 SQL을 작성하세요.
- 최고 가격이 80 이상인 카테고리만 출력하는 SQL을 작성하세요.
도전 문제
Products 테이블에서
카테고리별로
- 상품 개수
- 가격 합계
- 평균 가격
- 최고 가격
- 최저 가격
을 한 번의 SQL로 출력해 보세요.
다음 장 예고
지금까지 우리는
- COUNT()
- SUM()
- AVG()
- MAX()
- MIN()
다섯 가지 집계 함수를 각각 살펴보았습니다.
하지만 실제 업무에서는 이 함수들을 하나씩 따로 사용하는 경우보다, 여러 개를 함께 사용하는 경우가 훨씬 많습니다.
예를 들어 팀장님은 다음과 같이 요청할 수 있습니다.
"카테고리별 상품 수와 평균 가격, 최고 가격, 최저 가격을 한 번에 보여 주세요."
다음 장에서는 여러 집계 함수를 조합하여 하나의 통계 보고서를 만드는 방법을 배우겠습니다.