02/20 SQL 문제풀이 - 1174. Immediate Food Delivery II (Leetcode)

Data Architect / Engineer·2024년 2월 20일
1

1일_1SQL

목록 보기
35/63
post-thumbnail

문제

  • LeetCode SQL 문제
  • 1174. Immediate Food Delivery II / Medium
  • 문제 내용 : [링크]


내가 작성한 Query

with temp_01 as(
select customer_id
     , case when datediff(min(order_date), min(customer_pref_delivery_date)) = 0 then 1 
       else 0 end as cnt
from delivery
group by customer_id)
select round(sum(cnt)/count(*)*100, 2) as immediate_percentage
from temp_01
  • customer_id 별 'immediate_percentage'를 구해야 하므로, customer_id 기준으로 GROUP BY 해 준다.

  • 고객별 첫 주문('first order')의 order_datecustomer_pref_delivery_date의 날짜가 같은 경우 이를 'immediate'로 정의한다. 따라서 CASE WHEN THEN 구문을 통해 order_date의 min 값과 customer_pref_delivery_date의 min 값의 일수 차이를 DATEDIFF() 함수를 통해 구해주고, 그 값이 0인 데이터는 1 아니면, 0을 출력해준다.

  • order_datecustomer_pref_delivery_date의 날짜가 같은 경우만 1을 출력해준다.

  • MIN() 사용했나 ? : 고객의 최초 주문 데이터에 대한 계산이므로, 일자에 MIN() 함수를 사용하면 최초 주문 데이터를 구할 수 있다.

  • 위에서 구한 데이터들을 temp_01으로 설정

  • 전체 인원 대비 최초 주문이 'immediate' 인 고객의 총 인원의 비율을 구한다.
    SUM(cnt) / COUNT(*) * 100

  • ROUND() 함수를 통해 소수 둘째자리까지의 백분율을 구하고 immediate_percentage 컬럼으로 출력한다.

  • 일자를 구할 때, 최초 일자는 MIN() 함수를 사용할 수 있고, CASE WHEN THEN을 구할 때 특정 조건을 만족하는 데이터의 개수를 추출할 수 있다.

profile
질문은 계속돼 아오에

0개의 댓글