2023年8月23日 星期三

8/23 每日一題(MYSQL 交貨日期與訂單日期相同,則該訂單稱為立即訂單的機率)

Table: Delivery

+-----------------------------+---------+
| Column Name                 | Type    |
+-----------------------------+---------+
| delivery_id                 | int     |
| customer_id                 | int     |
| order_date                  | date    |
| customer_pref_delivery_date | date    |
+-----------------------------+---------+
delivery_id is the primary key (column with 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.

Write a solution to find the percentage of immediate orders in the table, 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           | 5           | 2019-08-02 | 2019-08-02                  |
| 3           | 1           | 2019-08-11 | 2019-08-11                  |
| 4           | 3           | 2019-08-24 | 2019-08-26                  |
| 5           | 4           | 2019-08-21 | 2019-08-22                  |
| 6           | 2           | 2019-08-11 | 2019-08-13                  |
+-------------+-------------+------------+-----------------------------+
Output: 
+----------------------+
| immediate_percentage |
+----------------------+
| 33.33                |
+----------------------+ 

Explanation: The orders with delivery id 2 and 3 are immediate while the others are scheduled. 


# Write your MySQL query statement below
SELECT ROUND(COUNT(delivery_id)/(SELECT COUNT(delivery_id) FROM Delivery)*100,2)   AS immediate_percentage
FROM Delivery
WHERE order_date = customer_pref_delivery_date
--------------------------------參考答案

# Write your MySQL query statement below
SELECT ROUND((
    SELECT COUNT(*)
    FROM Delivery
    WHERE customer_pref_delivery_date = order_date
) * 100 / COUNT(*), 2) AS immediate_percentage
FROM Delivery;

---------------------------------
# Write your MySQL query statement below
SELECT ROUND(100*AVG(order_date = customer_pref_delivery_date), 2) AS immediate_percentage
FROM Delivery;
---------------------------------
# Write your MySQL query statement below
WITH base_table as (SELECT
    CASE WHEN order_date = customer_pref_delivery_date THEN 'immediate' ELSE 'scheduled' END as delivery_type
FROM Delivery
),

master_table AS (SELECT
    COUNT(CASE WHEN delivery_type = 'immediate' THEN delivery_type END) / COUNT(CASE WHEN delivery_type = 'immediate' OR delivery_Type = 'scheduled' THEN delivery_type END) * 100 as immediate_percentage
FROM base_table
)

SELECT
    ROUND(immediate_percentage,2) as immediate_percentage
FROM master_table

標籤:

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁