mysql - 根据列值的增量选择多行

标签 mysql count row

我有一个表(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/

相关文章:

sql - 计算一行中非空字段的数量

java - 无论索引如何,最后一行始终从 DefaultTableModel 中删除

javascript - href 和 tr 点击避免重叠

mysql - mysql_ssl_rsa_setup 从哪里获取 OpenSSL 文件?

mysql - 在 MySQL 中对 varchar 字段进行数字排序

sql - 字段上的条件计数

matlab - 计算并显示出现的总和

java - 从行列表中获取数组?

php - Joomla 保存后设置 `file` 字段值

mysql - 从多个表中查询行