Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีคำนวณค่าเฉลี่ยของคอลัมน์ Time ใน MySQL

ค่าเฉลี่ยของ TIME: แปลงเป็นวินาที หาค่าเฉลี่ย แล้วแปลงกลับ

MySQL ไม่สามารถ AVG() คอลัมน์ TIME ได้โดยตรง ต้องแปลงเป็นวินาทีก่อน

รูปแบบคำสั่ง

SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(yourColumnName))) AS anyVariableName
FROM yourTableName;

ตัวอย่างสร้างตารางและข้อมูลเวลา

mysql> CREATE TABLE AverageOnTime (
    -> PunchInTime TIME
    -> );
Query OK, 0 rows affected (0.61 sec)

mysql> INSERT INTO AverageOnTime VALUES('00:00:40');
mysql> INSERT INTO AverageOnTime VALUES('00:02:50');
mysql> INSERT INTO AverageOnTime VALUES('00:03:30');
mysql> INSERT INTO AverageOnTime VALUES('00:04:55');

ข้อมูลทั้งหมด

mysql> SELECT * FROM AverageOnTime;
+-------------+
| PunchInTime |
+-------------+
| 00:00:40    |
| 00:02:50    |
| 00:03:30    |
| 00:04:55    |
+-------------+
4 rows in set (0.00 sec)

คำนวณค่าเฉลี่ย

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)

อธิบายขั้นตอน:

  1. TIME_TO_SEC('00:00:40') = 40 วินาที
  2. TIME_TO_SEC('00:02:50') = 170 วินาที
  3. TIME_TO_SEC('00:03:30') = 210 วินาที
  4. TIME_TO_SEC('00:04:55') = 295 วินาที
  5. AVG(40, 170, 210, 295) = 178.75 วินาที
  6. SEC_TO_TIME(178.75) = '00:02:58.7500'

ฟังก์ชันเพิ่มเติม:

  • TIME_TO_SEC(time) - TIME → วินาที
  • SEC_TO_TIME(seconds) - วินาที → TIME (รองรับทศนิยม)
  • TIMEDIFF(time1, time2) - ความต่างระหว่างเวลาสองค่า

กรณี DATETIME: ใช้ UNIX_TIMESTAMP() แปลงเป็นวินาที แล้ว FROM_UNIXTIME() แปลงกลับ