理想汽车大数据面试SQL-辅助驾驶里程占比
⚠️ 待修正
一、题目背景
这道题来自理想汽车的数据分析岗面试。理想汽车是新能源车企,数据分析师需要从海量业务数据中挖掘洞见。
业务场景:车联网相关需求在日常工作中频繁出现,这类型的SQL题是面试高频考点。
一、题目
现有一张车辆行驶里程明细表 t1_driving_log,记录了每辆理想汽车每天的行驶数据,包含总行驶里程和辅助驾驶开启里程。请计算每辆车在统计周期内辅助驾驶里程占总行驶里程的占比,并按占比降序排列。
行驶明细表 t1_driving_log:
+----------+------------+----------------+----------------------+
| car_id | drive_date | total_distance | adas_distance |
+----------+------------+----------------+----------------------+
| C001 | 2024-01-01 | 85.6 | 42.3 |
| C001 | 2024-01-02 | 120.4 | 78.9 |
| C001 | 2024-01-03 | 56.2 | 12.0 |
| C002 | 2024-01-01 | 200.0 | 150.5 |
| C002 | 2024-01-02 | 95.3 | 95.3 |
| C003 | 2024-01-01 | 30.0 | 0.0 |
| C003 | 2024-01-02 | 45.7 | 20.1 |
| C003 | 2024-01-03 | 78.5 | 55.4 |
+----------+------------+----------------+----------------------+
三、思路分析
本题考察聚合计算和占比求解,难度较低。核心思路是对每辆车按天计算总里程和辅助驾驶里程,然后求占比。
解题步骤:
- 按
car_id分组,使用SUM()分别聚合total_distance和adas_distance; - 计算辅助驾驶里程占比 =
SUM(adas_distance) / SUM(total_distance); - 按占比降序排列。
| 维度 | 评分 |
|---|---|
| 题目难度 | ⭐️ |
| 题目清晰度 | ⭐️⭐️⭐️⭐️⭐️ |
| 业务常见度 | ⭐️⭐️⭐️⭐️⭐️ |
四、逐步推导
1. 计算每辆车总里程和辅助驾驶里程
执行SQL
select car_id,
sum(total_distance) as total_km,
sum(adas_distance) as adas_km
from t1_driving_log
group by car_id
执行结果
+----------+----------+---------+
| car_id | total_km | adas_km |
+----------+----------+---------+
| C001 | 262.2 | 133.2 |
| C002 | 295.3 | 245.8 |
| C003 | 154.2 | 75.5 |
+----------+----------+---------+
2. 计算占比并排序
执行SQL
select car_id,
sum(total_distance) as total_km,
sum(adas_distance) as adas_km,
round(sum(adas_distance) / sum(total_distance), 4) as adas_rate
from t1_driving_log
group by car_id
order by adas_rate desc
执行结果
+----------+----------+---------+-----------+
| car_id | total_km | adas_km | adas_rate |
+----------+----------+---------+-----------+
| C002 | 295.3 | 245.8 | 0.8324 |
| C001 | 262.2 | 133.2 | 0.5080 |
| C003 | 154.2 | 75.5 | 0.4896 |
+----------+----------+---------+-----------+
五、常见坑点
坑1:NULL值的隐式处理 — 聚合函数跳过NULL,窗口函数不跳过。WHERE需显式过滤或用COALESCE替代。
坑2:数据类型不一致导致JOIN失效 — string vs int隐式转换可能触发全表扫描,性能骤降。
六、举一反三
-
增加时间维度对比:按天/周/月分组,观察指标的趋势和季节性波动
-
增加分组维度:按品类/地区/渠道拆解,发现差异化的业务洞察
-
设置预警阈值:在WHERE中加阈值判断,自动筛选异常数据
七、知识点总结
| 考点 | 说明 |
|---|---|
| CASE WHEN 条件聚合 | 灵活实现分段统计、条件计数、标签化处理 |
| GROUP BY + 聚合函数 | 分组聚合是数据分析的基础,配合HAVING筛选分组结果 |
| 日期函数 | DATEDIFF / DATE_ADD / unix_timestamp处理日期运算 |
八、建表语句和数据插入
点击展开 DDL & DML
-- 建表语句
CREATE TABLE t1_driving_log (
car_id string COMMENT '车辆ID',
drive_date string COMMENT '行驶日期',
total_distance double COMMENT '总行驶里程(km)',
adas_distance double COMMENT '辅助驾驶里程(km)'
) COMMENT '车辆行驶里程明细表';
-- 数据插入
INSERT INTO t1_driving_log VALUES
('C001', '2024-01-01', 85.6, 42.3),
('C001', '2024-01-02', 120.4, 78.9),
('C001', '2024-01-03', 56.2, 12.0),
('C002', '2024-01-01', 200.0, 150.5),
('C002', '2024-01-02', 95.3, 95.3),
('C003', '2024-01-01', 30.0, 0.0),
('C003', '2024-01-02', 45.7, 20.1),
('C003', '2024-01-03', 78.5, 55.4);
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
