【字节跳动】识别设备类别中的高耗能设备
聚合函数窗口函数CASE WHEN日期函数用户行为分析面试真题
题目描述
来源:字节跳动 SQL 面试真题
某智能家居服务商需要监控用户家中各类设备的电力消耗情况。系统需要分析每台设备的月度用电量,找出那些比同类设备平均用电量更高的高耗能设备,并生成提醒简报。
数据表
smart_devices 智能设备信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| device_id | VARCHAR | 设备唯一标识符,主键 |
| device_name | VARCHAR | 设备名称,例如 Living Room AC |
| category | VARCHAR | 设备类别,例如 HVAC、Lighting、Kitchen |
| location | VARCHAR | 设备所在位置,例如 Living Room |
| install_date | DATE | 设备安装日期 |
energy_logs 能耗日志表
| 字段 | 类型 | 说明 |
|---|---|---|
| log_id | INT | 日志编号,主键 |
| device_id | VARCHAR | 设备 ID,逻辑关联 smart_devices.device_id |
| usage_kwh | DECIMAL | 该时段消耗的电量,单位为千瓦时 |
| log_timestamp | DATETIME | 日志记录时间 |
| status | VARCHAR | 设备状态:active、standby 或 error |
题目要求
找出 2025 年 1 月期间总用电量严格大于其所属设备类别该月平均总用电量的设备。
设备类别的月平均总用电量需要基于该类别下的所有设备计算,1 月没有能耗日志的设备按 0 千瓦时参与平均值计算。
输出字段:
device_name:设备名称。location_code:将 location 中的所有空格替换为下划线,并转换为全大写,例如Living Room转为LIVING_ROOM。total_usage:设备 2025 年 1 月总用电量,四舍五入保留 2 位小数。efficiency_level:当 total_usage >= 50.00 时为High Load,否则为Normal。
结果按 total_usage 降序排列;若用电量相同,则按 device_id 升序排列。所有能耗日志状态均属于有效日志,题目不要求按 status 过滤。
数据样例
| device_idPKVARCHAR(30) | device_nameVARCHAR(100) | categoryVARCHAR(30) | locationVARCHAR(100) | install_dateDATE |
|---|---|---|---|---|
| D-001 | Living Room AC | HVAC | Living Room | 2023-06-01 |
| D-002 | Master Bedroom AC | HVAC | Master Bedroom | 2023-07-15 |
| D-003 | Office AC | HVAC | Home Office | 2024-01-10 |
| D-004 | Kitchen Light | Lighting | Kitchen | 2024-03-20 |
| D-005 | Hallway Light | Lighting | Main Hallway | 2024-04-05 |
| D-006 | Water Heater | Kitchen | Utility Room | 2022-11-01 |
| D-007 | Dishwasher | Kitchen | Kitchen | 2023-02-18 |
输入数据显示 7 / 7 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里