MySQL में TIME टाइप कॉलम का औसत (Average) समय प्रारूप में प्राप्त करना
समस्या:
AVG() सीधे TIME कॉलम पर काम नहीं करता। सेकंड में बदलकर औसत निकालें, फिर वापस TIME में।
सिंटैक्स:
SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(yourColumnName))) AS anyVariableName FROM yourTableName;
चरण-दर-चरण:
TIME_TO_SEC(time)→ समय को कुल सेकंड में बदलेंAVG(seconds)→ औसत सेकंड निकालेंSEC_TO_TIME(avg_seconds)→ वापस TIME फॉर्मेट (HH:MM:SS) में
व्यावहारिक उदाहरण
1. टेबल बनाएं:
mysql> CREATE TABLE AverageOnTime (PunchInTime TIME); Query OK, 0 rows affected (0.61 sec)
2. समय डेटा डालें:
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');
3. सभी रिकॉर्ड:
+-------------+ | PunchInTime | +-------------+ | 00:00:40 | | 00:02:50 | | 00:03:30 | | 00:04:55 | +-------------+ 4 rows in set (0.00 sec)
4. औसत समय निकालें:
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)
गणना विवरण:
- 40 सेकंड
- 170 सेकंड (2:50)
- 210 सेकंड (3:30)
- 295 सेकंड (4:55)
- कुल: 715 सेकंड
- औसत: 715/4 = 178.75 सेकंड = 2 मिनट 58.75 सेकंड
अन्य समय एग्रीगेशन:
| ऑपरेशन | क्वेरी |
|---|---|
| कुल समय (समय जोड़ना) | SEC_TO_TIME(SUM(TIME_TO_SEC(col))) |
| न्यूनतम समय | MIN(col) (सीधे काम करता है) |
| अधिकतम समय | MAX(col) (सीधे काम करता है) |
| मेडियन समय | विंडो फंक्शन या सबक्वेरी से |
DATETIME कॉलम के लिए:
-- केवल समय भाग का औसत SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(TIME(datetime_col)))) FROM table; -- पूर्ण डेटाटाइम औसत (जटिल, आमतौर पर अर्थहीन)
प्रदर्शन:
TIME_TO_SECहर पंक्ति पर लागू होता है — इंडेक्स उपयोग नहीं कर सकता- बड़े डेटासेट के लिए मैटेरियलाइज्ड व्यू या सारांश टेबल विचार करें