LoginSignup
0
0

More than 5 years have passed since last update.

【BigQuery】TIME型の加算をINT64に変換して秒単位でする

Posted at

背景

Bリーグのスタッツの分析をしようと以下のようなデータを用意しました。
BigQuery_-_itatibs_-_Google_Cloud_Platform.png

カラム名 備考
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行が長くなってしまうのでなんとか改善したいです。

余談

ちなみにこの分析で秋田の選手がやっぱり上位に出てくるのかと思いましたが、ガベージタイムやインサイドの外人を休ませる間の繋ぎ選手が上位で出てきました。(確かにそりゃそうですよね。。。)

report001_20190216.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0