이제 데이터에서 극단값을 찾는 세상으로 들어가 보자 — 최소값과 최대값 찾기! 걱정하지 마, SQL이 뭔가 엄청 새로운 걸 요구하진 않아. 대신 테이블에서 제일 크거나 작은 값을 뽑는 방법을 배울 거야. 이 함수들은 진짜 어디서나 써: IMDb 영화 평점 분석부터 화성의 최저 온도 계산까지!
MIN()랑 MAX()는 집계 함수야. 데이터 집합에서 각각 최소값과 최대값을 반환해. 얘네는 극단값 사냥꾼 같은 존재지: MIN()는 제일 작은 걸 찾고, MAX()는 반대로 제일 큰 걸 찾아. 숫자에만 쓰는 게 아니라 문자열이나 날짜에도 쓸 수 있어.
-- MIN과 MAX 함수의 기본 형태
SELECT
MIN(column_name) AS min_value,
MAX(column_name) AS max_value
FROM table_name;
진짜 쉽지? 이제 이 마법이 다양한 상황에서 어떻게 동작하는지 보자.
문법과 기본 예시
숫자 데이터
예를 들어 employees 테이블이 있고, 거기에 직원들의 월급(salary) 컬럼이 있다고 해보자.
최소 월급과 최대 월급을 알고 싶어.
employees 테이블
| id | name | salary |
|---|---|---|
| 1 | Anna Song | 45000 |
| 2 | Otto Art | 30000 |
| 3 | Maria Chi | 120000 |
| 4 | Alex Lin | 90000 |
| 5 | Eva Tan | 60000 |
-- 숫자 데이터 예시
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees;
결과
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
문자열 데이터
MIN()와 MAX()는 문자열에도 쓸 수 있어.
알파벳 순서로 비교해 (맞아, 문자도 "제일 작고" "제일 큰" 게 있어!).
예를 들어 students 테이블에 name 컬럼이 있다고 해보자.
students 테이블
| id | name |
|---|---|
| 1 | Anna |
| 2 | Otto |
| 3 | Maria |
| 4 | Ben |
| 5 | Zoe |
-- 문자열 데이터 예시
SELECT
MIN(name) AS first_name_in_order,
MAX(name) AS last_name_in_order
FROM students;
결과
| first_name_in_order | last_name_in_order |
|---|---|
| Anna | Zoe |
날짜와 시간
events 테이블에서 제일 이른 날짜와 제일 늦은 날짜를 찾아보자.
events 테이블
| id | event_name | event_date |
|---|---|---|
| 1 | New Year Party | 2023-01-01 |
| 2 | Summer Fest | 2023-06-15 |
| 3 | Halloween Bash | 2023-10-31 |
| 4 | Year End Gala | 2023-12-31 |
-- 날짜 데이터 예시
SELECT
MIN(event_date) AS earliest_date,
MAX(event_date) AS latest_date
FROM events;
결과
| earliest_date | latest_date |
|---|---|
| 2023-01-01 | 2023-12-31 |
MIN()와 MAX()를 NULL 값이 있는 테이블에서 쓰기
컬럼에 NULL 값이 있어도 걱정 마! SQL은 계산할 때 NULL을 그냥 무시해.
즉, MIN()와 MAX()는 "정상" 값만 가지고 동작해.
employees_with_null 테이블
| id | name | salary |
|---|---|---|
| 1 | Otto | 30000 |
| 2 | Maria | NULL |
| 3 | Anna | 120000 |
| 4 | John | NULL |
-- NULL이 있는 테이블 예시
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees_with_null;
salary 컬럼에 NULL이 있어도 그냥 무시돼.
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
근데 컬럼 전체가 NULL이면 결과도 NULL이야.
실전에서 MIN()와 MAX() 쓰는 예시
가장 나이 많은 직원과 가장 어린 직원 찾기
employees 테이블
| id | name | birth_date |
|---|---|---|
| 1 | Otto | 1980-05-10 |
| 2 | Maria | 1990-11-20 |
| 3 | Anna | 1975-03-15 |
| 4 | John | 2000-08-01 |
employees 테이블에 birth_date 필드가 있는데, 이게 직원 생일이야. 제일 나이 많은 사람과 어린 사람을 찾아보자.
SELECT
MIN(birth_date) AS oldest_employee,
MAX(birth_date) AS youngest_employee
FROM employees;
결과:
| oldest_employee | youngest_employee |
|---|---|
| 1975-03-15 | 2000-08-01 |
판매 분석
| id | amount |
|---|---|
| 1 | 150.00 |
| 2 | 75.50 |
| 3 | 200.00 |
| 4 | 120.00 |
| 5 | 500.00 |
| 6 | 90.00 |
sales 테이블에 amount 필드가 있는데, 이게 판매 금액이야. 최소 판매액과 최대 판매액을 찾아보자.
SELECT
MIN(amount) AS smallest_sale,
MAX(amount) AS largest_sale
FROM sales;
쿼리 결과
| smallest_sale | largest_sale |
|---|---|
| 75.50 | 500.00 |
가장 첫 주문과 마지막 주문 찾기
orders 테이블에 order_date 필드가 있으면, 첫 주문 날짜와 마지막 주문 날짜를 쉽게 찾을 수 있어.
원본 orders 테이블
| order_id | customer_id | order_date | amount |
|---|---|---|---|
| 101 | 1 | 2023-01-15 10:23:00 | 250.00 |
| 102 | 2 | 2023-02-10 14:45:00 | 150.00 |
| 103 | 3 | 2023-01-05 09:10:00 | 300.00 |
| 104 | 1 | 2023-03-22 16:30:00 | 500.00 |
| 105 | 4 | 2023-01-25 11:00:00 | 120.00 |
SELECT
MIN(order_date) AS first_order,
MAX(order_date) AS last_order
FROM orders;
쿼리 결과:
| first_order | last_order |
|---|---|
| 2023-01-05 09:10:00 | 2023-03-22 16:30:00 |
MIN()와 MAX()의 특징
문자열 비교: 문자열에서 MIN()와 MAX()는 알파벳 순서로 비교해.
NULL 처리: 컬럼에 다른 값이 있으면 NULL은 무시돼. 근데 전부 NULL이면 결과도 NULL이야.
날짜 비교: SQL은 연도뿐 아니라 월, 일, 시, 분까지 다 따져서 비교해.
GO TO FULL VERSION