背景
Bリーグのスタッツの分析をしようと以下のようなデータを用意しました。
カラム名 | 型 | 備考 |
---|---|---|
game_date | DATETIME | 試合日 |
team | STRING | チーム名 |
player | STRING | 選手名 |
F | INT64 | ファール数 |
MIN | TIME | 出場時間(時:分:秒) |
div | STRING | ディビジョン(B1/B2) |
B1については投稿時点で最新の2018-19シーズンの24節までのスタッツを保持しています。
第24節の三河vs秋田後、秋田のディフェンスに若干おこな桜木JRさんのツイッターを見て各選手の出場時間10分あたりのファール数を出してみようとしました。
そのため、出場時間として使っているTIME型を選手毎にSUMして平均を出したいと思った時にそもそもTIME型同士の加算ってどうしたらいいのかと悩んだのがきっかけです。
TIME型を秒のINT64型に変換して使用
結論として以下のようなクエリを発行して出しました。
SELECT
team,
player,
ROUND(SUM(F) / SUM(CAST(FORMAT_TIME('%M',MIN) AS INT64) * 60 +CAST( FORMAT_TIME('%S',MIN) AS INT64)) * 600, 2) F_per10min
FROM
`Dwh.boxscore_P*`
WHERE
div = 'B1'
GROUP BY
team,
player
ORDER BY
F_per10min DESC
単純にTIME + TIMEができればベストなのですが、SQLは基本的にTIME_ADDとかしかないので、結局秒に変換して使用することにしました。
TIME型の変換先はSTRING型とTIME型なので、一旦STRINGに変換してからCASTでINT64に変換しています。
これだと1行が長くなってしまうのでなんとか改善したいです。
余談
ちなみにこの分析で秋田の選手がやっぱり上位に出てくるのかと思いましたが、ガベージタイムやインサイドの外人を休ませる間の繋ぎ選手が上位で出てきました。(確かにそりゃそうですよね。。。)