[LeetCode] 1174. Immediate Food Delivery II - SQL

Donghyun·2024년 8월 26일
0

Code Kata - SQL

목록 보기
48/61
post-thumbnail

링크: https://leetcode.com/problems/immediate-food-delivery-ii/

Table: Delivery

+-----------------------------+---------+
| Column Name                 | Type    |
+-----------------------------+---------+
| delivery_id                 | int     |
| customer_id                 | int     |
| order_date                  | date    |
| customer_pref_delivery_date | date    |
+-----------------------------+---------+
delivery_id is the column of unique values of this table.
The table holds information about food delivery to customers that make orders at some date and specify a preferred delivery date (on the same order date or after it).

If the customer's preferred delivery date is the same as the order date, then the order is called immediate; otherwise, it is called scheduled.

The first order of a customer is the order with the earliest order date that the customer made. It is guaranteed that a customer has precisely one first order.

Write a solution to find the percentage of immediate orders in the first orders of all customers, rounded to 2 decimal places.

The result format is in the following example.

Example 1:

Input:
Delivery table:
+-------------+-------------+------------+-----------------------------+
| delivery_id | customer_id | order_date | customer_pref_delivery_date |
+-------------+-------------+------------+-----------------------------+
| 1           | 1           | 2019-08-01 | 2019-08-02                  |
| 2           | 2           | 2019-08-02 | 2019-08-02                  |
| 3           | 1           | 2019-08-11 | 2019-08-12                  |
| 4           | 3           | 2019-08-24 | 2019-08-24                  |
| 5           | 3           | 2019-08-21 | 2019-08-22                  |
| 6           | 2           | 2019-08-11 | 2019-08-13                  |
| 7           | 4           | 2019-08-09 | 2019-08-09                  |
+-------------+-------------+------------+-----------------------------+
Output:
+----------------------+
| immediate_percentage |
+----------------------+
| 50.00                |
+----------------------+
Explanation:
The customer id 1 has a first order with delivery id 1 and it is scheduled.
The customer id 2 has a first order with delivery id 2 and it is immediate.
The customer id 3 has a first order with delivery id 5 and it is scheduled.
The customer id 4 has a first order with delivery id 7 and it is immediate.
Hence, half the customers have immediate first orders.

문제풀이

목표: 전체 고객의 첫 번째 주문에서 immediate 주문의 비율을 소수점 둘째 자리까지 반올림하라.

  • immediate : 고객의 선호 배송 날짜가 주문 날짜와 같을 때
  • scheduled : 그 외 나머지

최종코드

SELECT 
    ROUND(AVG(order_date = customer_pref_delivery_date)*100, 2) immediate_percentage
FROM Delivery
WHERE (customer_id, order_date) IN (
    SELECT customer_id, MIN(order_date)
    FROM Delivery
    GROUP BY customer_id);

설명

WHERE 절 서브쿼리

WHERE (customer_id, order_date) IN (
    SELECT customer_id, MIN(order_date)
    FROM Delivery
    GROUP BY customer_id)
  • Delivery 테이블에서 customer_id를 기준으로 그룹화하고, 각 고객의 최초 주문 날짜를 찾아서 반환

메인쿼리 SELECT 절

SELECT 
    ROUND(AVG(order_date = customer_pref_delivery_date)*100, 2) immediate_percentage
  • order_date가 고객이 선호하는 날짜인 customer_pref_delivery_date와 같은 경우에 대해서 불리언 값을 평균하는 방법을 사용했다.
  • 그리고 그 비율을 계산해 소수점 둘째자리까지 반올림
profile
데이터분석 공부 일기~!

0개의 댓글