2주차

Suhyeon Lee·2024년 8월 26일
0

목표

  • SQL을 이용하여 숫자 계산 값 도출
    • 두 컬럼의 합계 값
    • 전체 데이터의 갯수
    • 범주별 계산
  • Query 결과를 원하는 순서대로 조회
    • 데이터 가나다 순 정렬

1주차 복습

  • SQL문이란
    • DB에서 데이터를 조회하기 위한 언어
    • SQL 문법을 이용하여 DB에 명령을 내린다 = Query 한다
  • 기본 구조
    • SELECT
      • ‘데이터 조회’ 명령어
      • 필수 구문
    • FROM
      • ‘어디에서 데이터를 조회할까’ 명령어
      • 필수 구문
    • WHERE
      • 조건 지정 구문
  • 조건 지정 방법
    • 비교연산자: <, >, <=, >=
    • 다양한 구문: IN, BETWEEN, LIKE
    • 여러 가지 조건의 적용: AND, OR, NOT

A. 엑셀 대신 SQL로 한 번에 계산하기(SUM, AVERAGE, COUNT, MIN, MAX)

1. 숫자 연산

  • 예시 (상품 준비시간과 배달시간의 합계 구하기)
SELECT	food_preparation_time,
		delivery_time,
        food_preparation_time + delivery_time AS total_time
FROM food_orders
  • 숫자 연산 종류
연산자설명
+더하기
-빼기
*곱하기
/나누기

2. 함수

  • SQL에서는 계산의 편의를 위해 함수를 제공하고 있음
    • 사용 방법은 엑셀과 유사
    • 데이터의 범위가 아닌 계산할 column을 직접 적는다
  • 종류
    • 합계: SUM(column)
    • 평균: AVG(column)
  • 예시 (상품 준비시간의 합계와 평균 구하기)
SELECT	SUM(food_preparation_time) total_food_preparation_time,
		AVG(delivery_time) avg_delivery_time
FROM food_orders

3. 전체 데이터의 갯수

  • 현재 테이블이 몇 개의 데이터를 가지고 있는지, 몇 개의 값을 가지고 있는지 구할 수 있음
  • 함수 종류
    • 데이터 갯수: COUNT(column)
      • column 명 대신 1 혹은 * → 테이블 안에 있는 모든 데이터의 갯수를 세고 싶을 때
    • 몇 개의 값을 가지고 있는지 구할 때: DISTINCT

💡 전체 주문 건수는 10건, 주문한 사람은 5명일 경우 COUNT(1) → 10, COUNT(DISTINCT 고객명) → 5

  • 예시 (주문건수와 주문한 고객 수 구하기)
SELECT	COUNT(1) count_of_orders,
		COUNT(DISTINCT customer_id) count_of_customers
FROM food_orders

4. 데이터의 범위, 최솟값과 최댓값

  • 함수 종류
    • 최솟값: MIN(column)
    • 최댓값: MAX(column)
  • 예시 (주문 가격의 최솟값, 최댓값 구하기)
SELECT	MIN(price) min_price,
		MAX(price) max_price
FROM food_orders

B. [실습] WHERE 절로 원하는 데이터 뽑고 계산해보기

  • 주문 금액이 30,000원 이상인 주문건의 갯수 구하기
SELECT	COUNT(1) AS cnt_orders
FROM	food_orders
WHERE	price >= 30000

(1) 흐름 파악
 ㄱ. 어떤 테이블에서 데이터를 뽑을 것인가 → 주문 테이블
 ㄴ. 어떤 컬럼을 이용할 것인가 → 주문 금액, 주문 번호
 ㄷ. 어떤 조건을 지정해야 하는가 → 30,000원 이상
 ㄹ. 어떤 함수 (수식) 을 이용해야 하는가 → 갯수 구하는 수식
(2) 구문 만들기
 ㄱ. 어떤 테이블에서 데이터를 뽑을 것인가 → from food_orders
 ㄴ. 어떤 컬럼을 이용할 것인가 → order_id, price
 ㄷ. 어떤 조건을 지정해야 하는가 → where price >= 30000
 ㄹ. 어떤 함수 (수식) 을 이용해야 하는가 → count(order_id) 혹은 count(1)
(3) 최종

SELECT	COUNT(order_id) count_of_orders
FROM	food_orders
WHERE	price>=30000
  • 한국 음식의 주문 당 평균 음식 가격 구하기
SELECT	AVG(price) AS average_price
FROM	food_orders
WHERE	cuisine_type = 'Korean'    

C. GROUP BY로 범주별 연산 한 번에 끝내기

1. 카테고리별로 숫자 연산을 간단하게 하기

  • 음식 종류별로 평균 음식 가격을 구하기 위해 where 절을 사용해서 수십개의 쿼리를 작성하는 건 너무 비효율적임 → GROUP BY로 해결 가능
    • 편의를 위해 ‘원하는 단위로(e.g. 음식 종류별, 식당별) 나누는 것’을 ‘카테고리별로’ 계산한다고 명명
  • 여러 번의 Query 없이 카테고리를 지정하여 수식 함수로 연산할 수 있음

2. GROUP BY 기본 구조

SELECT		column_name(s)
FROM		table_name
WHERE		condition
GROUP BY	column_name(s);
  • 예시
select		cuisine_type,
        	sum(price) sum_of_price
from		food_orders
group by	cuisine_type

3. [실습] GROUP BY를 이용하여 카테고리별 연산해보기

  • 음식점별 주문 금액 최댓값 조회
SELECT		restaurant_name,
			MAX**(price) AS max_price
FROM		food_orders
GROUP BY	restaurant_name
  • 결제 타입별 가장 최근 결제일 조회
SELECT		pay_type,
			MAX(date) AS recent_date
FROM		payments
GROUP BY	pay_type

💡가장 최근 결제일도 MAX 함수! (날짜 중 가장 큼 = 가장 최근)

E. Query 결과를 정렬하여 업무에 바로 사용하기 (ORDER BY)

1. Query 결과는 항상 동일한 순서로 출력될까? → NO

  • SQL 결과 원하는 값 기준으로 정렬하기
    • 오름차순: 숫자가 점점 커지는 순서로
    • 내림차순: 숫자가 점점 작아지는 순서로

2. 정렬문 ORDER BY

SELECT		column_name(s), SUM(column)
FROM		 table_name
WHERE	 	condition
GROUP BY	 column_name(s)
ORDER BY	 column_name(s);
  • ORDER BY는 카테고리 컬럼 지정, 그리고 ORDER BY를 적어주는 것으로 적용 가능
    • 정렬을 원하는 컬럼 → 원하는 컬럼 아무거나, SUM(계산 컬럼) 둘 다 가능
    • 두 가지 이상의 colum을 이용해 정렬할 수도 있음 → ORDER BY column1, column2, ...
  • 정렬의 종류
종류구문예시
오름차순생략ORDER BY SUM(price)
내림차순DESCORDER BY SUM(price) DESC
  • 예시 (음식 종류별 주문 금액 합계를 ‘주문 금액 합계’ 기준으로 오름차순 정렬)
SELECT		cuisine_type,
			SUM(price) AS sum_of_price
FROM		food_orders
GROUP BY	cuisine_type
ORDER BY	SUM(price)

3. [실습] ORDER BY를 이용해 데이터 정렬해보기

  • 음식점별 주문 금액 최댓값 조회하기 - 최댓값 기준으로 내림차순 정렬
SELECT		restaurant_name,
			MAX(price) AS max_price
FROM		food_orders
GROUP BY	restaurant_name
ORDER BY	MAX(price) DESC
  • 고객을 이름 순으로 오름차순으로 정렬하기
SELECT		*
FROM		customers
ORDER BY	name

F. SQL 구조 마스터 - WHERE, GROUP BY, ORDER BY로 완성되는 SQL 구조

1. 완성된 SQL문의 기본 구조

select
from
where
group by
order by

  • 세부적으로 응용할 구문은 많지만, 지금까지 배운 것이 뼈대가 되는 문법임
    • 이 문법만 알고 있어도 다른 사람이 쓴 SQL문을 이해할 수 있음
    • 순서 꼭 잘 기억하기

2. [퀴즈] 조회할 데이터를 SQL 구조에 맞춰서 바꿔보기

  • 구조 맞춰보기 1
    (1) order by sum(delivery_time) desc
    (2) group by cuisine_type
    (3) where day_of_the_week=’Weekend’
    (4) from food_orders
    (5) select cuisine_type, sum(delivery_time) total_delivery_time

→ (5)-(4)-(3)-(2)-(1)

  • 구조 맞춰보기 2
    (1) where age between 20 and 40
    (2) select age, count(name) count_of_name
    (3) order by age
    (4) group by age
    (5) from customers

→ (2)-(5)-(1)-(4)-(3)

2주차 숙제

  • 음식 종류별 가장 높은 주문 금액과 가장 낮은 주문 금액을 조회하고, 가장 낮은 주문 금액 순으로 (내림차순) 정렬하기
SELECT		cuisine_type,
			MIN(price) min_price,
            MAX(price) max_price
FROM		food_orders
GROUP BY	cuisine_type
ORDER BY	MIN(price) DESC
profile
2 B R 0 2 B

0개의 댓글