我有一个表(action_tbl)如下:
ActionID | Frame | Player_ID
----------------------------
1234 | 15 | 1
1235 | 15 | 1
1236 | 30 | 1
1237 | 280 | 1
1238 | 10 | 2
1239 | 60 | 2
1240 | 320 | 2
我想在 MySQL 中编写一个脚本来计算 240 帧周期内每个玩家的操作次数(对于 0-240 之间的帧,Frame_Period 为 0、241-480、1 等)。 所以输出应该如下:
Count_Actions | Frame_Period | Player_ID
----------------------------
3 | 0 | 1
1 | 1 | 1
2 | 0 | 2
1 | 1 | 2
已编辑
最佳答案
<强> Sql Fiddle Demo
SELECT frame_id as Frame_Period, `Player_ID`, count(*) as Count_Actions
FROM action_tbl a
JOIN (SELECT 0 as frame_id, 0 low_limit, 240 high_limit
UNION
SELECT 1 as frame_id, 241 low_limit, 480 high_limit
UNION
SELECT 2 as frame_id, 481 low_limit, 720 high_limit
UNION
SELECT 3 as frame_id, 721 low_limit, 960 high_limit
) as frame_range
ON a.`Frame` between frame_range.low_limit
and frame_range.high_limit
GROUP BY `Player_ID`, frame_id
ORDER BY `Player_ID`, frame_id
输出
| frame_id | Player_ID | Count_Actions |
|----------|-----------|---------------|
| 0 | 1 | 3 |
| 1 | 1 | 1 |
| 0 | 2 | 2 |
| 1 | 2 | 1 |
<强> Second aproach
SELECT truncate((Frame - 1) / 240, 0) as Frame_Period,
`Player_ID`,
count(*) as Count_Actions
FROM action_tbl
GROUP BY `Player_ID`, Frame_Period
ORDER BY `Player_ID`, Frame_Period
关于mysql - 根据列值的增量选择多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34048491/