[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 ----

구조 퀴즈

  1. 정렬 구조
    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. 구조 퀴즈 답안

  1. 구조 순서:
  2. SELECT → FROM → WHERE → GROUP BY → ORDER BY
  3. 예시 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;
  4. 예시 2
    • 연령대별 이름 갯수를 연령 오름차순 정렬:
    SELECT age, COUNT(name) AS count_of_name
    FROM customers
    WHERE age BETWEEN 20 AND 40
    GROUP BY age
    ORDER BY age;