카테고리 없음

데이터 분석 공부 일지 2일차 250422 (화)

elya0919 2025. 4. 23. 13:51

SQL 2주 차 강의

2-1

1주 차 강의 복습과 2주 차 학습할 내용

  • SQL 문이란 : 데이터베이스에 질문하는 언어, 여기서 질문은 "쿼리"라고 함

  • SQL 문의 기본 구조
  1. SELECT

= 어떤 컬럼을 가져올지

2. FROM

= 선택한 컬럼을 어떤 테이블에서 가져올지

3. WHERE

= 조건을 걸어 그에 맞는 데이터를 가져옴

조건의 종류는

비교연산자( 부등호, = )

IN

= 제시한 값이 하나라도 있을 경우 출력

사용 예시

WHERE age in ( 6,21 ) = 6살 또는 21살인 모든 사람 출력

LIKE

= 패턴 매칭 연산자, %를 사용해 앞, 뒤, 중간에 비슷한 형태의 데이터를 찾기

사용 예시

WHERE age LIKE '2%' = 20대인 사람들 출력

BETWEEN

= 제시한 두 값 사이의 범위에 있는 값 출력

사용 예시

WHERE age BETWEEN 20 and 29 = 20살부터 29살까지 사람들 출력

AND

= 제시한 모든 값을 만족해야 출력

사용 예시

WHERE age >= 20 and gender 'male' = 20살 이상이면서 남자인 사람 출력

OR

= 하나라도 해당되면 출력

사용 예시

WHERE age >= 20 or gender 'male' = 20살 이상이거나 남자면 출력

NOT

= 제시한 값이 아닌 것 출력

WHERE NOT gender 'male' = 남자가 아닌 사람 출력

+

2주 차 강의에서 배울 내용

1. 집계 함수 (SUM, AVERAGE, COUNT, MIN, MAX),

2. GROUP BY = 그룹으로 묶어서 처리

3. ORDER BY = 오름차순 ASC , 내림차순 DESC

2-2

SELECT 절에서 컬럼과 컬럼의 사칙연산이 가능하다

사용 예시

1. " + " 사용

SELECT food_preparation_time + delivery_time as total_time

= 음식 준비 시간 컬럼과 배달 시간 컬럼을 합쳐 총 시간을 구할 수 있다.

2. SUM (더하기), AVG (평균)

select sum(food_preparation_time) total_food_preparation_time,

= 음식 준비 시간 컬럼을 모두 더해 total_food_preparation_time 이란 별칭으로 변경한다.

avg(delivery_time) avg_delivery_time

= 배달 시간의 평균을 구하고 avg_delivery_time라는 별칭으로 변경한다.

3. COUNT = 총개수 세기

select

count(1) count_of_orders,

= Count (1) 전체 행의 개수를 세고, Count_of_orders 라는 별칭으로 출력

count(distinct customer_id) count_of_customers

= count(distinct customer_id) Customer_ID가 중복되지 않게 행의 개수를 세고

= count_ofcustomers라는 별칭으로 출력

select count(1) as total_payments

from payments

= payments 테이블에서 전체 행의 개수를 구한다.

이걸 이용해서

select count(distinct pay_type) as total_pay_type

= 중복되지 않는 pay_type의 행의 개수를 구하고 total_pay_type라는 별칭으로 출력한다.

값이 2가 나오는데 pay_type은 Cash, card만 있기 때문이다.

4. min(최솟값), max(최댓값)

사용 예시

select

min(price) as min_price = price 컬럼의 최솟값을 min_price라는 별칭으로 출력

max(price) as max_price = price 컬럼의 최댓값을 max_price라는 별칭으로 출력

2-3 [실습] WHERE 절로 원하는 데이터를 뽑고, 계산해 보기

  • Query를 적기 전에 흐름을 정리해 보기
  1. 어떤 테이블에서 데이터를 뽑을 것인가
  2. 어떤 컬럼을 이용할 것인가
  3. 어떤 조건을 지정해야 하는가
  4. 어떤 함수 (수식) 을 이용해야 하는가

실습 1

주문금액 30,000원 이상 주문 건 개수

주문금액이 들어갔으니 food_orders 테이블에서

주문 건 컬럼인 order_id와

가격 컬럼인 price를 사용

30000원 이상의 조건 = WHERE 절에서 30000원 이상

개수가 들어가니 = count 함수 사용

select count(order_id)

from food_orders

where price >= 30000

실습 2

한국 음식의 주문 당 평균 음식 가격 구하기

음식 관련 = food_orders 테이블에서

한국 음식의 = WHERE Cuisine_type = 'Korean'

평균 음식 가격 = avg(price)

select avg(price) as avg_price

from food_orders

where cuisine_type = 'Korean'

2-4 GROUP BY로 범주별 연산 한 번에 끝내기

GROUP BY = 원하는 컬럼을 묶어서 출력함

[실습] Group by를 이용하여 카테고리별 연산해 보기

1. 음식점별 주문 금액 최댓값 조회하기

음식점 정보가 있는 테이블 = food_orders

주문 금액 컬럼 = Price

최댓값 함수 = MAX()

음식점별 = group by restaurant_name

주문 금액 최댓값 = max(price)

select restaurant_name, MAX(price) as max_price

from food_orders

group by restaurant_name

2. 결제 타입별 가장 최근 결제일 조회하기

어떤 테이블? = 결제 테이블 Payments

어떤 칼럼? = 페이 타입별 최근 결제일이니까 pay_type, date

어떤 조건? = 없음

어떤 함수? = 최근 결제일이니까 date에 MAX 함수

select pay_type, max(date)

from payments

group by pay_type

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

ORDER BY = 지정한 컬럼의 데이터 정렬 오름차순, 내림차순

ASC = 오름차순, order by의 기본은 오름차순이기에 생략 가능

DESC = 내림차순

+

Order by 컬럼_1, 컬럼_2 이렇게 되어있으면

컬럼_1 부터 정렬되고 그 다음 컬럼_2가 정렬됨

[실습] Order by를 이용하여 데이터를 정렬해 보기

1. 음식점별 주문 금액 최댓값 조회하기 - 최댓값 기준으로 내림차순 정렬

어떤 테이블? = food_orders

어떤 컬럼 ? = 음식점별 restaurant_name, 주문금액 최댓값 price

어떤 조건 = x

어떤 함수, 수식?

= 최댓값이니 MAX(), 최댓값 기준 내림차순 order by, 음식점별 group by

select restaurant_name, MAX(price) as max_price

from food_orders

group by restaurant_name

order by max_price DESC

2. 고객을 이름순으로 오름차순으로 정렬하기

테이블? = 고객 정보 테이블

컬럼? = 고객 이름

조건? = x

함수, 수식? = 이름 오름차순 order by

select customer_name

from customers

order by customer_name

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

SQL에서 순서는 매우 중요하다

select

from

where

group by

order by

항상 이 순서를 지킬 것

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

- 1번 구조 맞춰보기

  1. order by sum(delivery_time) desc
  2. group by cuisine_type
  3. where day_of_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주 차 숙제

음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고,

가장 낮은 주문금액 순으로 (내림차순) 정렬하기

테이블? = Food_orders

컬럼 ? = 음식 종류별 cuisine_type, 가격 price

조건? = x

함수, 수식? = MAX, MIN, GROUP BY, ORDER BY

select

cuisine_type,

min(price) as min_price,

max(price) as max_price

from food_orders

group by cuisine_type

order by min_price DESC

오늘 학습하면서 느낀 점, 어려웠던 점

= 강의로 보면 전부 이해가 되는 느낌인데 막상 다시 복습하면서 문제만 보고 쿼리를 만들려고 하니 생각보다 수월하게 풀리지 않음.

실습 문제 풀었던 거 모아놓고 계속 풀고 ChatGPT한테도 내가 공부했던 부분의 문제를 만들어 달라 하고 풀어봐야겠음