SQL面试题:统计各DK站点首次下单时间为周日的用户数量
业务数据表说明
1. DK_Table表
字段包含:DK_ID、DK_Name、Dk_location、Cust_Id、Amount、Event、Time_stamp,样例数据如下:
DK_ID DK_Name Dk_location Cust_Id Amount Event Time _stamp 1 A KOR01 111123 752 Order_Placed 8-14-21 21:05 3 C WHF01 111123 688 Order_Placed 8-15-21 22:20 1 A KOR01 111123 752 Order_Accepted 8-14-21 21:05 1 A KOR01 111123 752 Order_Prepared 8-14-21 21:09 1 A KOR01 111123 752 Order_Picked 8-14-21 21:25
2. Delivery_Agent_Table表
字段包含:DEX_Id、Cust_Id、DK_Id、Event、Time Stamp,样例数据如下:
DEX_Id Cust_Id DK_Id Event Time Stamp AAEE01 111123 1 Delivery_Assigned 8-14-21 21:07 AAEE01 111123 1 Arrived_DK Location 8-14-21 21:20 AAEE01 111123 1 Arrived_Destination 8-14-21 21:40
统计需求
按每个DK分组,统计首次下单时间为周日的用户总数量。
SQL查询语句
以下以MySQL语法为例,不同数据库周日的判断函数可根据实际情况调整:
SELECT dk.DK_ID, dk.DK_Name, COUNT(DISTINCT dk.Cust_Id) AS 周日首次下单用户数 FROM ( -- 子查询:获取每个DK下每位用户的首次下单时间 SELECT DK_ID, DK_Name, Cust_Id, MIN(`Time _stamp`) AS first_order_time FROM DK_Table WHERE Event = 'Order_Placed' GROUP BY DK_ID, DK_Name, Cust_Id ) dk -- 筛选首次下单时间为周日的记录,MySQL DAYOFWEEK返回1代表周日 WHERE DAYOFWEEK(dk.first_order_time) = 1 GROUP BY dk.DK_ID, dk.DK_Name;
注:本次统计所需的DK标识、用户ID、下单事件及时间字段均已包含在DK_Table中,无需关联Delivery_Agent_Table。如果使用其他数据库可调整周几判断逻辑:PostgreSQL可替换为EXTRACT(DOW FROM dk.first_order_time) = 0,Oracle可替换为TO_CHAR(dk.first_order_time, 'D') = 1。
内容的提问来源于stack exchange,提问作者Jeevan A Y
相关产品推荐
相关产品推荐

