如何按关卡(level)计算失败率?SQL新手求助
SQL实现关卡失败率统计
现有表格数据
假设表名为game_events,数据如下:
| id | event | level |
|---|---|---|
| 1 | level_started | 1 |
| 1 | level_completed | 1 |
| 1 | level_started | 2 |
| 1 | level_failed | 2 |
| 2 | level_started | 1 |
| 2 | level_completed | 1 |
| 2 | level_started | 2 |
| 2 | level_failed | 2 |
| 4 | level_started | 1 |
| 4 | level_completed | 1 |
| 4 | level_started | 2 |
| 4 | level_failed | 2 |
| 5 | level_started | 1 |
| 5 | level_completed | 1 |
| 5 | level_started | 2 |
| 5 | level_failed | 2 |
| 3 | level_started | 1 |
| 3 | level_completed | 1 |
| 3 | level_started | 2 |
| 3 | level_failed | 2 |
期望输出格式
需要按关卡统计失败率,输出如下结构:
| level | loss_rate (in percentages) |
|---|---|
| 1 | |
| 2 |
失败率定义:event为level_failed的记录占比。
SQL实现方案
方案一:按关卡尝试次数计算失败率(更符合业务逻辑)
这里的失败率指失败次数/关卡尝试次数(尝试次数即level_started的记录数):
SELECT level, ROUND( (COUNT(CASE WHEN event = 'level_failed' THEN 1 END) * 100.0) / COUNT(CASE WHEN event = 'level_started' THEN 1 END), 2 ) AS `loss_rate (in percentages)` FROM game_events GROUP BY level ORDER BY level;
方案二:按关卡所有事件记录计算失败率
严格按"level_failed记录占该关卡所有event记录的比例"计算:
SELECT level, ROUND( (COUNT(CASE WHEN event = 'level_failed' THEN 1 END) * 100.0) / COUNT(*), 2 ) AS `loss_rate (in percentages)` FROM game_events GROUP BY level ORDER BY level;
说明
- 将
game_events替换为你的实际表名 ROUND(...,2)用于保留两位小数,可根据需求调整保留位数GROUP BY level确保按每个关卡单独统计- 两种方案在样本数据中结果一致:关卡1的失败率为0%,关卡2为50%
内容的提问来源于stack exchange,提问作者alesya kirilchuk
相关产品推荐
相关产品推荐

