2015-12-02 76 views
0

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

編輯

+0

@JuanCarlosOropeza這是一個錯字。我編輯它。 – YNr

+0

你可以爲幀週期範圍創建一個分離的表嗎? –

+0

@JuanCarlosOropeza表格(球員在比賽中的動作)有700多行,超過500個Player_ID。另外,每個匹配的「frame」的最大值也不相同。 – YNr

回答

1

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 
+0

檢查我的編輯。我測試框架'239,240,241'的邊框情況,看起來沒問題 –