Today i learned & Week i learned/SQL 관련

내일배움캠프 데이터분석 2주차 SQL 개인과제 [1]

데분조 2023. 12. 29. 16:13
반응형

 기초 셋팅

1. mysql 설치해서 로컬 서버 만들기
2. 디비버에서 로컬 서버 연결하기
3. csv 파일 임포트 하기
4. 테이블 명, 로컬 명 변경하기

5. ER 다이어그램을 이용하여 테이블끼리 릴레이션 만들기 


문제 1: "최소 주문 날짜 찾기"

주어진 테이블 **list_of_orders**에는 여러 주문들의 날짜가 저장되어 있습니다. 주문 날짜는 'dd-mm-yyyy' 형식으로 저장되어 있습니다. 이 테이블에서 가장 이른 주문 날짜를 찾아보세요.

 

select date_time
from(
select str_to_date( 
concat(
substr(order_date,7,4),"-",substr(order_date,4,2),"-",substr(order_date,1,2)
),"%Y-%m-%d"
) "date_time"
from list_of_orders
) a
where date_time is not null
order by date_time

 

설명 1. concat()과 substr()을 이용하여 dd-mm-yyyy 형식에서 yyyy-mm-dd형식으로 변경
설명 2. str_to_date()을 이용하여 문자형에서 date형으로 변경

설명 3. 서브 쿼리문으로 작성하여 date_time라는 컬럼 명으로 바꾸기
설명 4. where 절을 이용하여 null 데이터 없애기

설명 5. order by 절을 이용하여 정렬

 

또 다른 코드

select MIN(STR_TO_DATE(order_date, '%d-%m-%Y')) as MIN_DATE
from list_of_orders

 

출력 결과

 


문제 2: "카테고리별 총 매출 계산하기"

order_details 테이블에는 다양한 주문들의 세부 정보가 저장되어 있습니다. 각 주문은 특정 'Category'에 속하며, 각 주문의 'Amount'는 그 주문의 매출 금액을 나타냅니다. 이 테이블을 사용하여 각 카테고리별 총 매출 금액을 계산하세요.

select Category, sum(amount)
from order_details od
group by Category

설명 1. sum(amount)를 통하여 총 매출 금액 구하기

설명 2. category로 그룹화하기

 

출력 결과


문제 3: "상위 5명의 고객별 총 구매액 찾기"

두 개의 테이블 order_details와 list_of_orders가 있습니다. order_details 테이블은 각 주문의 세부사항을 포함하고 있으며, list_of_orders 테이블은 주문에 대한 고객의 이름과 주문 ID를 포함합니다.
각 고객별로 총 구매액을 계산하여, 구매액이 가장 높은 상위 5명의 고객을 찾아보세요.

 

SELECT l.CustomerName, sum(d.amount)
FROM order_details d
INNER JOIN list_of_orders l ON d.order_id = l.order_id 
GROUP BY 1
order by 2 desc
limit 5

설명 1. order_details와 list_of_orders를  join을 이용하여 합치기

설명 2. customername 기준으로 그룹화( group by 절 )

설명 3. 총 판매량 기준으로 내림차순 정렬( order by 절 )

설명 4. 상위 다섯 개만 출력 (limit 5)

 

출력 결과

반응형