TIL

2024-06-26

여연찌 2024. 6. 26. 20:33
  • Today

1. SQL 코드카타 1문

2. project 정리

3. 태블로 2주차 강의 수강

 


  • Today I Learned

 

SQL

 

 

조건이 포함되지 않는 데이터 출력하기

  • Write a solution to report the movies with an odd-numbered ID and a description that is not "boring".
SELECT *
FROM Cinema
WHERE id % 2 != 0 AND description NOT LIKE "%boring%"
ORDER BY rating DESC;

같지 않다 라는 의미에서 

!= 또는 <> 을 사용 하면 된다..

NOT LIKE 를 사용하면 해당 단어가 포함되지 않는 것을 출력함

 

파이썬만 주구장창 보다보니 SQL을 점점 잊어가는 느낌이다ㅠㅠ

이번 프로젝트에서 원하는 조건만 출력할 때에 SQL을 사용하여 전처리 하였는데

다시 한번 살펴 봐야겠다 생각하여 훑어보기로 했다.

 

 

 

이번 프로젝트에서

customer_id,order_id 별 sequential 의 max 값, installment 의 max 값, value 의 sum 

인 데이터를 뽑아낼 때 아래와 같은 SQL 코드를 사용했다.

 

WITH payment_summary AS (
    SELECT 
        customer_id,
        order_id,
        MAX(payment_sequential) OVER (PARTITION BY customer_id, order_id) max_sequential,
        MAX(payment_installments) OVER (PARTITION BY customer_id, order_id) max_installment,
        SUM(payment_value) OVER (PARTITION BY customer_id, order_id) sum_payment,
        payment_installments,
        payment_type,
        ROW_NUMBER() OVER (PARTITION BY customer_id, order_id ORDER BY payment_installments DESC) row_num
    FROM clean_data
    WHERE order_delivered_timestamp LIKE '2018%'
)
SELECT 
    customer_id,
    order_id,
    max_sequential,
    max_installment,
    sum_payment,
    CASE WHEN max_installment = payment_installments THEN payment_type END payment_type
FROM payment_summary 
WHERE row_num = 1
ORDER BY max_installment DESC, sum_payment ;

ROW_NUMBER 을 사용 하여 installment(할부개월) 을 제일 큰 값부터 정렬을 해주었다.

WITH 구문만 출력해보자면 다음과 같다

 

이후 

CASE WHEN 구문을 이용하여 payment_type 을 적어주었다.

여기에서 max_installment = payment_installments 를 조건으로 둔 이유는

한 열을 기준으로 행을 선택할 경우 다른 열에는 그 기준에 맞는 데이터값이 아닌

인덱스 기준으로 나올 수 있다보니 확실히 해주기 위해 넣었다!

 

즉, payment_installments 는 max 값으로 가지고 왔지만, payment_type 는 인덱스 행의 값이 추출 될 수 있기 때문에

확실한 값을 찾아내기 위해 저러한 조건을 주었던 것!

 

 


  • Next

1. SQL 코드카타

2. 태블로 수강

3. Python 판다스 사용해보기

'TIL' 카테고리의 다른 글

2024-06-28  (0) 2024.06.28
2024-06-27  (0) 2024.06.27
2024-06-18  (0) 2024.06.18
2024-06-17  (0) 2024.06.17
2024-06-15  (1) 2024.06.15