
데이터베이스에서 데이터의 합계, 평균, 최대값, 최소값을 계산할 때 사용하는 대표적인 aggregate(집계) 함수들입니다.
데이터를 분석할 때 가장 기본이 되는 함수들이죠!
SUM(): 숫자 값의 합계를 계산합니다.
AVG(): 숫자 값의 평균을 계산합니다.
MAX(): 최대값을 찾습니다.
MIN(): 최소값을 찾습니다.
✅ 테이블 정보: sales
| Column | Type | Description |
|---|---|---|
sale_id | INT | 판매 ID (PRIMARY KEY) |
product_name | VARCHAR | 상품명 |
amount | DECIMAL | 판매 금액 |
sale_date | DATE | 판매일자 |
데이터 예시:
| sale_id | product_name | amount | sale_date |
|---|---|---|---|
| 1 | Laptop | 1000 | 2025-05-01 |
| 2 | Mouse | 50 | 2025-05-02 |
| 3 | Laptop | 1200 | 2025-05-02 |
| 4 | Keyboard | 200 | 2025-05-03 |
| 5 | Monitor | 500 | 2025-05-04 |
| 6 | Laptop | 800 | 2025-05-05 |
| 7 | Mouse | 100 | 2025-05-05 |
| 8 | Keyboard | 300 | 2025-05-06 |
1) "지금까지 총 매출, 평균 상품 가격, 가장 비싼 상품의 가격, 가장 싼 상품의 가격은?"
SELECT SUM(amount), AVG(amount), MAX(amount), MIN(amount)
FROM sales
결과
| SUM(amount) | AVG(amount) | MAX(amount) | MIN(amount) |
|---|---|---|---|
| 4150 | 518.75 | 1200 | 50 |
AS는 컬럼명이나 별칭(Alias) 을 지정할 때 사용합니다. 이렇게 하면 쿼리 결과의 가독성이 높아지고, 표현이 더 명확해집니다.
SELECT 컬럼명 AS 별칭: 컬럼명에 별칭을 지정합니다 ("띄어쓰기 가능 별칭" 혹은 변수명처럼 가능)!
바로 위 예제를 그대로 적용하면
SELECT
SUM(amount) AS "Total Sales",
AVG(amount) AS avg_sales,
MAX(amount) AS max_price,
MIN(amount) AS min_price
FROM sales
결과
| Total Sales | avg_sales | max_price | min_price |
|---|---|---|---|
| 4150 | 518.75 | 1200 | 50 |
각 컬럼에 별칭이 생긴 것을 볼 수 있습니다!
데이터베이스에서 데이터를 그룹별로 묶어 요약하고 싶을 때, 바로 이 GROUP BY가 등장합니다!
GROUP BY는 지정한 컬럼을 기준으로 데이터를 묶어, 그룹별로 aggregate(집계) 함수(SUM, AVG, MAX, MIN, COUNT)를 적용할 수 있게 합니다.
GROUP BY 컬럼명: 해당 컬럼의 값이 같은 행끼리 묶어줍니다.
위와 같은 테이블을 사용!
1) "각 상품별로 총 판매 금액을 알고 싶어요."
SELECT
product_name, SUM(amount) AS total_sales
FROM sales
GROUP BY product_name
결과 및 설명: GROUP BY product_name으로 같은 상품명끼리 묶고, SUM(amount)로 각 상품별 총 판매 금액을 계산하여 total_sales로 표시합니다~
| product_name | total_sales |
|---|---|
| Laptop | 3000 |
| Mouse | 500 |
| Keyboard | 1200 |
| Monitor | 800 |
2) “각 상품별로 판매된 건수는 몇 건인가요?”
SELECT product_name, COUNT(*) AS sale_count
FROM sales
결과
| product_name | sale_count |
|---|---|
| Keyboard | 2 |
| Laptop | 3 |
| Monitor | 1 |
| Mouse | 2 |
데이터베이스에서 데이터를 정렬하고 싶을 때, 바로 이 ORDER BY가 등장합니다! ORDER BY는 지정한 컬럼을 기준으로 데이터를 오름차순(ASC) 또는 내림차순(DESC) 으로 정렬할 수 있습니다.
ORDER BY 컬럼명 ASC: 오름차순 (default)
ORDER BY 컬럼명 DESC: 내림차순
이전과 같은 테이블을 사용!
1) “판매 금액을 오름차순으로 정렬하고 싶어요.”
SELECT sale_id, product_name, amount
FROM sales
ORDER BY amount ASC;
결과
| sale_id | product_name | amount |
|---|---|---|
| 2 | Mouse | 50 |
| 7 | Mouse | 100 |
| 4 | Keyboard | 200 |
| 8 | Keyboard | 300 |
| 5 | Monitor | 500 |
| 6 | Laptop | 800 |
| 1 | Laptop | 1000 |
| 3 | Laptop | 1200 |
2) “상품명은 오름차순, 금액은 내림차순으로 정렬하고 싶어요.”
SELECT sale_id, product_name, amount
FROM sales
ORDER BY product_name ASC, amount DESC;
결과 및 설명
먼저 product_name이 오름차순으로 정렬된 후에 (Keyboard → Laptop → Monitor → Mouse) 동일한 상품명에서 amount가 내림차순으로 정렬됩니다.
| sale_id | product_name | amount |
|---|---|---|
| 8 | Keyboard | 300 |
| 4 | Keyboard | 200 |
| 3 | Laptop | 1200 |
| 1 | Laptop | 1000 |
| 6 | Laptop | 800 |
| 5 | Monitor | 500 |
| 7 | Mouse | 100 |
| 2 | Mouse | 50 |
* 참고로 ORDER BY amount DESC, product_name ASC;로 하면 먼저 amount를 기준으로 내림차순으로 정렬을 한 후에, 동일한 가격에서 product_name으로 오름차순 정렬을 하기 때문에 결과가 아예 달라집니다. 주의하세요!
employees| Column | Type | Description |
|---|---|---|
employee_id | INT | 직원 ID (PRIMARY KEY) |
name | VARCHAR | 직원 이름 |
department | VARCHAR | 부서명 |
salary | DECIMAL | 월급 |
hire_date | DATE | 입사일자 |
Q) 각 부서별로 총 월급, 평균 월급, 최고 월급, 최저 월급을 계산하고,
그 결과를 총 월급 기준으로 내림차순으로 정렬해 주세요.
컬럼명은 Department, Total Salary, Average Salary, Highest Salary, Lowest Salary로 지정하세요.
SELECT
department,
SUM(salary) AS "Total Salary",
AVG(salary) AS "Average Salary",
MAX(salary) AS "Highest Salary",
MIN(salary) AS "Lowwest Salary"
FROM employees
GROUP BY department
ORDER BY SUM(salary) DESC;
데이터 예시
| employee_id | name | department | salary | hire_date |
|---|---|---|---|---|
| 1 | Alice | Sales | 3000 | 2023-01-10 |
| 2 | Bob | HR | 3500 | 2024-03-22 |
| 3 | Carol | IT | 5000 | 2022-07-15 |
| 4 | Dave | Sales | 4000 | 2025-05-01 |
| 5 | Eve | HR | 2500 | 2025-01-15 |
| 6 | Frank | IT | 7000 | 2023-11-30 |
| 7 | Grace | Marketing | 3200 | 2024-06-05 |
| 8 | Helen | Marketing | 2800 | 2025-04-20 |
쿼리 결과
| department | Total Salary | Average Salary | Highest Salary | Lowest Salary |
|---|---|---|---|---|
| IT | 12000 | 6000.00 | 7000 | 5000 |
| Sales | 7000 | 3500.00 | 4000 | 3000 |
| HR | 6000 | 3000.00 | 3500 | 2500 |
| Marketing | 6000 | 3000.00 | 3200 | 2800 |
이번 포스팅에서 데이터를 요약하고, 정렬하고, 원하는 대로 표현하는 것만으로도 SQL의 강력함을 알 수 있었습니다. 다음 포스팅에서는 더 어드벤스드 한 것들을 알아보아요! 그럼 👋