책 '데이터 분석을 위한 sql 레시피'를 참고했습니다.
<교재 8강 여러 개의 테이블 조작하기(2)>
(3) 조건 플래그를 0과 1로 표현하기
위 테이블을 결합해 사용자의 '신용카드 번호 등록 여부' , '구매 이력 여부' 두 가지 조건을 0과 1로 표현해보자 한다.
첫 번째는 case를 이용해 0과 1로 나타 내는것
두 번째는 sign을 이용하는 방법이 있다.
select m.user_id , m.card_number ,
count(p.user_id) as purchase_id ,
case
when m.card_number IS NOT NULL THEN 1 ELSE 0 END AS has_card, -- 카드 넘버가 있을 시 1, 아니면 0
sign(count(p.user_id)) as has_purchased -- 구매이력이 양수일 시 1 , 0일 시 0
from sql-study-project-376507.sql_study_bigquery.mst_users_with_card_number as m
left join
sql-study-project-376507.sql_study_bigquery.purchase_log as p
on m.user_id = p.user_id
group by m.user_id, m.card_number;
(4) 계산한 테이블에 이름 붙여 재사용하기
복잡한 sql 쿼리문을 작성할 때는 서브 쿼리의 중첩이 많아진다.
비슷한 처리를 여러번 하는 경우도 있는데 이럴경우 쿼리의 가독성이 굉장히 낮아진다.
이 경우 SQL99에 도입된 공통 테이블식 CTE를 사용해 일시적인 테이블에 이름을 붙혀 재사용 할 수 있다.
위 데이터를 이번회차 까지 배운 것을 기반으로 가로 정렬 후 카테고리의 상품 매출 순위를 한번에 보고자 한다.
또한 WITH구문을 사용해 반복적으로 처리하는 쿼리에 일시적으로 테이블을 만들이 이름을 부여하고자 한다.
with -- with <테이블 이름> as (select~~~) 형태로 사용
product_sale_ranking as (
select category_name,product_id,sales,
row_number() over(partition by category_name order by sales desc) as rank
from sql-study-project-376507.sql_study_bigquery.product_sales
)
select * from product_sale_ranking;
끝.
'SQL > 데이터 분석을 위한 SQL' 카테고리의 다른 글
[SQL] RFM 분석을 작성하는 SQL 쿼리(with. Google BigQuery) (0) | 2023.02.13 |
---|---|
[SQL] Decile 분석을 작성하는 SQL 쿼리 (with. Google BigQuery) (0) | 2023.02.12 |
[SQL] 여러 개의 테이블 조작하기 (0) | 2023.02.09 |
[SQL] 하나의 테이블에 대한 조작(2) (0) | 2023.02.09 |
[SQL] 하나의 테이블에 대한 조작(1) (0) | 2023.02.09 |
댓글