MySQLでTIME型カラムの平均値を取得する方法をわかりやすく解説
MySQLでTIME型カラムの平均値を求める基本構文
MySQLでTIME型(時間型)カラムの平均値を取得したい場合、AVG()関数をそのまま使うだけでは正しい結果が得られません。そこで活躍するのが、TIME_TO_SEC()とSEC_TO_TIME()という2つの関数です。
基本的な構文は以下の通りです。実行すると、結果が時間形式(HH:MM:SS)で返されます。
SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(yourColumnName))) AS anyVariableName FROM yourTableName;
この構文のポイントは、まずTIME_TO_SEC()で時間を秒数に変換してから平均を計算し、その後SEC_TO_TIME()で再び時間形式に戻している点です。これにより、正確な平均時間を求めることができます。
サンプルテーブルを作成する
それでは、実際に動作を確認してみましょう。まずはテスト用のテーブルを作成します。以下のクエリを実行してください。
mysql> CREATE TABLE AverageOnTime
-> (
-> PunchInTime time
-> );
Query OK, 0 rows affected (0.61 sec)ここでは「PunchInTime」というTIME型のカラムを持つ「AverageOnTime」テーブルを作成しました。出勤時刻のようなデータを想定したシンプルな構成です。
テストデータを挿入する
次に、INSERTコマンドを使って時間データを登録します。
mysql> INSERT INTO AverageOnTime VALUES('00:00:40');
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO AverageOnTime VALUES('00:02:50');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO AverageOnTime VALUES('00:03:30');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO AverageOnTime VALUES('00:04:55');
Query OK, 1 row affected (0.14 sec)登録したデータを確認する
SELECT文でテーブルの中身を確認してみましょう。
mysql> SELECT * FROM AverageOnTime;
実行結果は以下の通りです。
+-------------+ | PunchInTime | +-------------+ | 00:00:40 | | 00:02:50 | | 00:03:30 | | 00:04:55 | +-------------+ 4 rows in set (0.00 sec)
4件の時間データが正しく登録されていることが確認できました。
平均時間を計算するクエリを実行する
準備が整ったので、いよいよTIME型カラムの平均値を取得します。以下のクエリを実行してください。
mysql> SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(PunchInTime))) AS Average FROM AverageOnTime;
実行結果は以下のようになります。
+---------------+ | Average | +---------------+ | 00:02:58.7500 | +---------------+ 1 row in set (0.08 sec)
結果の解説
4件のデータ(00:00:40、00:02:50、00:03:30、00:04:55)の平均は「00:02:58.7500」という結果になりました。秒数に換算すると、40秒+170秒+210秒+295秒=715秒となり、715÷4=178.75秒。これを時間形式に変換すると2分58.75秒、つまり「00:02:58.7500」となり、計算が正しく行われていることがわかります。
このように、SEC_TO_TIME(AVG(TIME_TO_SEC(カラム名)))という組み合わせを使えば、MySQLでもTIME型カラムの平均値を簡単かつ正確に求めることができます。勤怠管理や処理時間の集計など、時間データの統計が必要な場面でぜひ活用してみてください。
-
MySQLでテーブルのカラム名(列名)を確認する方法|SHOW COLUMNSとinformation_schemaの使い方
MySQLでテーブルに含まれるカラム名(列名)を調べたい場合、SHOW COLUMNS文またはINFORMATION_SCHEMA.COLUMNSテーブルを使用する方法が一般的です。この記事では、両方の方法をサンプルコードとともにわかりやすく解説します。検証用テーブルの作成まず、動作確認用として以下のようなサンプルテーブルを作成します。mysql> create table DemoTable603 ( ClientId int NOT NULL AUTO_INCREMENT, ClientName varchar(100), Clien
-
MySQLで時間差を取得するクエリの書き方を解説
MySQLで現在時刻との時間差を取得する方法MySQLでは、NOW() 関数と INTERVAL を組み合わせることで、「現在時刻から一定時間以内」のレコードを簡単に抽出できます。ここでは、現在時刻から5時間以内に到着したデータを取得するクエリを例に、その手順を解説します。1. サンプルテーブルの作成まず、日時を格納するカラムを持つテーブルを作成します。mysql> create table DemoTable1570 -> ( -> ArrivalTime datetime