본문 바로가기
대외활동 및 인턴/빅데이터 분석 학회 BDA

CTE 응용 (BDA학회 SQL 문법 기초 연습반)

by 따`ddah 2024. 11. 10.

📍주제 : 수업 내용 리뷰 + 휴회기간 후 새로운 마음가짐! 📍필수 키워드 : BDA학회, 빅데이터 분석 학회, 대학생 학회, 데이터 분석

 

여러 테이블을 수정하고, 조인할 때 CTE를 사용하느냐 마냐에 따라 쿼리 길이도 달라지고, 효율성도 많이 달라진다. 그래서 효율적인 쿼리를 짤려면 CTE를 사용할 줄 알아야 한다. 

## 요구조건 1. 고객들의 월별 주문 횟수를 계산해서 특정 월에 고객의 활동 정보들을 요약해서 출력해 보자!

## 아웃풋 요구조건 : 고객 번호, 고객 이름, 구매 연도, 구매 월, 월별 주문 수 
##                 001       A      2003     03       5

## 요구조건 1-1. customer테이블과 order테이블 join으로 연결하기
select 
	c.customerNumber,
    c.customerName,
    o.orderNumber,
    o.orderdate    
from customers c
## 각 customers테이블과 orders테이블의 customernumber는 같으니까 두 테이블을 조인할 때 맞춰서 join하라
join 
	orders o 
on c.customernumber = o.customerNumber;

## 요구조건 1-2. group by 이용해서 연도별, 월별 주문수 집계가 필요하다
select 
	c.customerNumber,
    c.customerName,
    
    -- o.orderDate에서 Year, Month 추출하기 
    Year(o.orderDate) as orderYear,
    Month(o.orderDate) as orderMonth,
    
    -- ordernumber 갯수 세기 
    count(o.orderNumber) as monthlyordercount
from 
	customers c
join 
	orders o 
on c.customernumber = o.customerNumber

-- 특정 기준에 따라 데이터 행들을 묶는 것 
group by
	c.customerName,
    c.customerNumber,
    orderYear, ## Year(o.orderDate)
    orderMonth ## Month(o.orderDate)
    
-- 순서 정렬로, 쿼리 구성에는 큰 의미가 없다.
order by 
	c.customerNumber,
    orderYear;
## 요구조건 3. 2003년에 주문하고 2004년에는 주문하지 않은 고객을 분석하여서 해당 고객의 리스트를 추출하고 살펴보자!
select 
	c.customerName,
    c.customerNumber,
    Year(o.orderDate) as orderYear,
    count(o.orderNumber) as monthlyordercount
from customers c
join 
	orders o 
on c.customerNumber = o.customerNumber
where 
	Year(o.orderDate) != 2004
group by
	c.customerName,
	c.customerNumber,
	Year(o.orderDate);
728x90