반응형
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.
모든 고객의 첫 주문 중에서 즉시 배송된 비율을 소수점 둘째 자리까지 구하는 질문입니다.
SELECT customer_id, MIN(order_date)
FROM Delivery
GROUP BY customer_id
| customer_id | MIN(order_date) |
| ----------- | --------------- |
| 1 | 2019-08-01 |
| 2 | 2019-08-02 |
| 3 | 2019-08-21 |
| 4 | 2019-08-09 |
각 고객별로 가장 빠른 주문일(= 첫 주문)을 구합니다.
SELECT
*
FROM Delivery
WHERE (customer_id, order_date) IN (
SELECT customer_id, MIN(order_date)
FROM Delivery
GROUP BY customer_id
);
| 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 |
| 5 | 3 | 2019-08-21 | 2019-08-22 |
| 7 | 4 | 2019-08-09 | 2019-08-09 |
첫 주문만 필터링해 가져옵니다.
SELECT
round(sum(order_date = customer_pref_delivery_date) / COUNT(*) * 100, 2) AS immediate_percentage
FROM Delivery
WHERE (customer_id, order_date) IN (
SELECT customer_id, MIN(order_date)
FROM Delivery
GROUP BY customer_id
);
| immediate_percentage |
| -------------------- |
| 50 |
첫 주문 중에서 즉시 배송된 비율을 구합니다.
반응형
'Computer Science > SQL' 카테고리의 다른 글
SQL | LeetCode 619. Biggest Single Number (SQL GROUP BY...HAVING) (1) | 2025.05.12 |
---|---|
SQL | LeetCode 550. Game Play Analysis IV (SQL 서브쿼리 사용) (0) | 2025.05.11 |
SQL | LeetCode 1193. 월별, 국가별 거래 요약 통계 구하기 (1) | 2025.05.09 |
SQL | LeetCode 1211. Query 품질과 Poor Query 비율 계산하기 (0) | 2025.05.08 |
SQL | LeetCode 1633. 대회별 등록 사용자 비율 구하기 (2) | 2025.05.07 |