[SQL 기초]
[SQL] SUM, AVG, COUNT, DISTINCT, MIN, MAX, GROUP BY, ORDER BY 정리
dyk98
2024. 11. 28. 17:11
SQL 기본 구조 Review!
- SQL은 데이터를 조회하고 조작하기 위해 사용하는 언어.
- SQL 기본 구조
SELECT -- 데이터를 조회
FROM -- 데이터를 가져올 테이블 지정
WHERE -- 조건을 지정 (선택사항)
- 조건 연산자
- 비교 연산자: <, >, =, <>
- 기타: IN, BETWEEN, LIKE, AND, OR, NOT
SQL 숫자 계산
1) 기본 숫자 연산
- 사용 가능한 연산자연산자 설명
+ 더하기 - 빼기 * 곱하기 / 나누기 - 예시: 상품 준비 시간과 배달 시간의 합계
SELECT food_preparation_time,
delivery_time,
food_preparation_time + delivery_time AS total_time
FROM food_orders;
2) 합계와 평균 계산
- 사용 함수
- 합계: SUM(컬럼)
- 평균: AVG(컬럼)
- 예시: 준비 시간 합계와 배달 시간 평균
SELECT SUM(food_preparation_time) AS total_food_preparation_time,
AVG(delivery_time) AS avg_food_delivery_time
FROM food_orders;
3) 데이터 갯수 구하기
- 사용 함수
- 전체 데이터 갯수: COUNT(1) 또는 COUNT(*)
- 고유 값의 갯수: COUNT(DISTINCT 컬럼)
- 예시: 주문 건수와 고유 고객 수
SELECT COUNT(1) AS count_of_orders,
COUNT(DISTINCT customer_id) AS count_of_customers
FROM food_orders;
4) 최솟값과 최댓값 구하기
- 사용 함수
- 최솟값: MIN(컬럼)
- 최댓값: MAX(컬럼)
- 예시: 주문 가격의 최솟값과 최댓값
SELECT MIN(price) AS min_price,
MAX(price) AS max_price
FROM food_orders;
WHERE 절로 조건 지정
- 예시 1: 주문 금액이 30,000원 이상인 주문 건수
SELECT COUNT(order_id) AS count_of_orders
FROM food_orders
WHERE price >= 30000;
예시 2: 한국 음식 주문의 평균 가격
SELECT AVG(price) AS average_price
FROM food_orders
WHERE cuisine_type = 'Korean';
GROUP BY로 범주별 연산
1) 기본 구조
- 그룹별로 데이터를 묶고 연산을 수행:
SELECT category, contraint
FROM database OR table
GROUP BY categorycolumn;
- 예시: 음식 종류별 주문 금액 합계
SELECT cuisine_type,
SUM(price) AS sum_of_price
FROM food_orders
GROUP BY cuisine_type;
- 실습 1: 음식점별 주문 금액 최댓값
SELECT restaurant_name,
MAX(price) AS max_order_price
FROM food_orders
GROUP BY restaurant_name;
- 실습 2: 결제 타입별 가장 최근 결제일
SELECT pay_type AS payment_type,
MAX(date) AS latest_payment_date
FROM payments
GROUP BY pay_type;
ORDER BY로 정렬
1) 기본 구조
- 데이터를 정렬하여 결과를 출력:
SELECT ...
FROM ...
ORDER BY column_that_sorted_needed [ASC|DESC];
2) 정렬 예시
- 오름차순 정렬 (기본값):
ORDER BY columnName; ## ASECENDING IS DEFAULT
- 내림차순 정렬:
ORDER BY columnName DESC;
- 실습 1: 음식점별 최대 주문 금액 내림차순 정렬
SELECT restaurant_name,
MAX(price) AS max_order_price
FROM food_orders
GROUP BY restaurant_name
ORDER BY max(price) DESC;
- 실습 2: 고객 이름 오름차순 정렬
SELECT *
FROM customers
ORDER BY name;
SQL 앞의 함수들을 포함한 구조 완성
- SQL 기본 구조
SELECT ----
FROM ----
WHERE ----
GROUP BY ----
ORDER BY ----
구조 퀴즈
- 정렬 구조
SELECT → FROM → WHERE → GROUP BY → ORDER BY
2. 예시
- 음식 종류별 배달 시간 합계를 내림차순 정렬:
SELECT restaurant_name,
MAX(price) AS max_order_price
FROM food_orders
GROUP BY restaurant_name
ORDER BY max(price) DESC;
1. SQL의 기본 문법과 구조
- 기본 구조
- SELECT 컬럼 FROM 테이블 WHERE 조건 GROUP BY 카테고리컬럼 ORDER BY 정렬컬럼 [ASC|DESC];
- WHERE: 조건 필터링
- GROUP BY: 범주별 데이터 묶기
- ORDER BY: 데이터 정렬
2. 숫자 계산 함수
SUM() | 합계 계산 | SUM(price) |
---|---|---|
AVG() | 평균 계산 | AVG(delivery_time) |
COUNT() | 데이터 갯수 계산 | COUNT(order_id) |
MIN() | 최솟값 | MIN(price) |
MAX() | 최댓값 | MAX(price) |
- 3. 실습 예제
- 1) 주문 금액이 30,000원 이상인 주문 건수
SELECT COUNT(order_id) AS count_of_orders
FROM food_orders
WHERE price >= 30000;
2) 한국 음식 주문의 평균 가격
SELECT AVG(price) AS average_price
FROM food_orders
WHERE cuisine_type = 'Korean';
3) 음식 종류별 주문 금액 합계
SELECT cuisine_type,
SUM(price) AS sum_of_price
FROM food_orders
GROUP BY cuisine_type;
4) 음식점별 최대 주문 금액 내림차순 정렬
SELECT restaurant_name,
MAX(price) AS max_order_price
FROM food_orders
GROUP BY restaurant_name
ORDER BY max(price) DESC;
5) 고객 이름 오름차순 정렬
SELECT *
FROM customers
ORDER BY name;
4. 구조 퀴즈 답안
- 구조 순서:
SELECT → FROM → WHERE → GROUP BY → ORDER BY
- 예시 1
- 음식 종류별 배달 시간 합계를 내림차순 정렬:
SELECT cuisine_type, SUM(delivery_time) AS total_delivery_time FROM food_orders WHERE day_of_the_week = 'Weekend' GROUP BY cuisine_type ORDER BY SUM(delivery_time) DESC;
- 예시 2
- 연령대별 이름 갯수를 연령 오름차순 정렬:
SELECT age, COUNT(name) AS count_of_name FROM customers WHERE age BETWEEN 20 AND 40 GROUP BY age ORDER BY age;