ค่าเฉลี่ยของ 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)
อธิบายขั้นตอน:
TIME_TO_SEC('00:00:40')= 40 วินาทีTIME_TO_SEC('00:02:50')= 170 วินาทีTIME_TO_SEC('00:03:30')= 210 วินาทีTIME_TO_SEC('00:04:55')= 295 วินาทีAVG(40, 170, 210, 295)= 178.75 วินาที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() แปลงกลับ