MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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型カラムの平均値を簡単かつ正確に求めることができます。勤怠管理や処理時間の集計など、時間データの統計が必要な場面でぜひ活用してみてください。

  1. 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

  2. MySQLで時間差を取得するクエリの書き方を解説

    MySQLで現在時刻との時間差を取得する方法MySQLでは、NOW() 関数と INTERVAL を組み合わせることで、「現在時刻から一定時間以内」のレコードを簡単に抽出できます。ここでは、現在時刻から5時間以内に到着したデータを取得するクエリを例に、その手順を解説します。1. サンプルテーブルの作成まず、日時を格納するカラムを持つテーブルを作成します。mysql> create table DemoTable1570    -> (    -> ArrivalTime datetime