MySQL AVG() 函数示例
MySQL AVG() function examples
我使用 MySql RDBMS
mysql> SELECT VERSION();
+------------------+
| VERSION() |
+------------------+
| 8.0.17 |
+------------------+
1 row in set
我需要使用MySQL AVG() function
计算一组值的平均值。
我试过这个查询
mysql> SELECT DISTINCT
CASE WHEN xCode IS NULL THEN 'Total' ELSE xCode END AS `xCode`,
CASE WHEN xCode IS NULL THEN AVG(ROUND(IFNULL(`Average_Compilation_Time_minute`,'ND'),0))
ELSE ROUND(IFNULL(`Average_Compilation_Time_minute`,'ND'),0)
END AS `Average_Compilation_Time_minute`,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(SEC_TO_TIME(MOD (`Average_Compilation_Time_minute` * 60,86400)),'ND'))
ELSE IFNULL(SEC_TO_TIME(MOD (`Average_Compilation_Time_minute` * 60,86400)),'ND')
END AS `Average_Compilation_Time_hour`,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(CONCAT(FLOOR(`Average_Compilation_Time_minute` / 60),'h ',
MOD (`Average_Compilation_Time_minute`,60),'m'),'ND'))
ELSE
IFNULL(CONCAT(FLOOR(`Average_Compilation_Time_minute` / 60),'h ',
MOD (`Average_Compilation_Time_minute`,60),'m'),'ND')
END AS `Average_Compilation_Time_hour`,
sID
FROM `tbl_new_Average`
GROUP BY xCode WITH ROLLUP;
+-------+---------------------------------+-------------------------------+-------------------------------+-----+
| xCode | Average_Compilation_Time_minute | Average_Compilation_Time_hour | Average_Compilation_Time_hour | sID |
+-------+---------------------------------+-------------------------------+-------------------------------+-----+
| D1E1 | 2848.0000 | 23:28:00 | 47h 28m | 1 |
| D2E1 | 8.0000 | 00:08:00 | 0h 8m | 2 |
| D2E2 | 3284.0000 | 06:44:00 | 54h 44m | 3 |
| D4E1 | 382.0000 | 06:22:00 | 6h 22m | 4 |
| D4E2 | 372.0000 | 06:12:00 | 6h 12m | 5 |
| D5E1 | 1481.0000 | 00:41:00 | 24h 41m | 6 |
| D5E2 | 5703.0000 | 23:03:00 | 95h 3m | 7 |
| D6E1 | 841.0000 | 14:01:00 | 14h 1m | 8 |
| D6E2 | 3.0000 | 00:03:00 | 0h 3m | 9 |
| Total | 1658.0000 | 8.666666666666666 | 27.333333333333332 | 9 |
+-------+---------------------------------+-------------------------------+-------------------------------+-----+
10 rows in set
但是我在 return Average_Compilation_Time_hour
列上有两个不同的结果集
第 Average_Compilation_Time_hour
列中的正确平均值是什么?
在最后一行,我需要这种格式的 AVG HH:mm:ss
请帮忙?
非常感谢
下面是我的代码
DROP TABLE
IF EXISTS `tbl_new_Average`;
CREATE TABLE `tbl_new_Average` (
`xCode` VARCHAR (255) DEFAULT NULL,
`Average_Compilation_Time_minute` INT (11) DEFAULT NULL,
`Average_Compilation_Time_hour` CHAR (8) DEFAULT NULL,
`sID` INT (11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`sID`)
) ENGINE = MyISAM DEFAULT CHARSET = latin1;
INSERT INTO `tbl_new_Average` VALUES('D1E1','2848','23:28:00','1');
INSERT INTO `tbl_new_Average` VALUES('D2E1','8','00:08:00','2');
INSERT INTO `tbl_new_Average` VALUES('D2E2','3284','06:44:00','3');
INSERT INTO `tbl_new_Average` VALUES('D4E1','382','06:22:00','4');
INSERT INTO `tbl_new_Average` VALUES('D4E2','372','06:12:00','5');
INSERT INTO `tbl_new_Average` VALUES('D5E1','1481','00:41:00','6');
INSERT INTO `tbl_new_Average` VALUES('D5E2','5703','23:03:00','7');
INSERT INTO `tbl_new_Average` VALUES('D6E1','841','14:01:00','8');
INSERT INTO `tbl_new_Average` VALUES('D6E2', '3', '00:03:00', '9');
更新
mysql> SELECT
COALESCE(xCode,'Total') AS xxxCode,
ROUND(`Average_Compilation_Time_minute`,0) AS `Average_Compilation_Time_minute`,
ROUND(`Average_Compilation_Time_hour2`,0) AS `Average_Compilation_Time_hour2`,
`Average_Compilation_Time_hour` AS `Average_Compilation_Time_hour`
FROM (
SELECT xCode,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(`Average_Compilation_Time_minute`,'ND'))
ELSE IFNULL(`Average_Compilation_Time_minute`,'ND')
END AS `Average_Compilation_Time_minute`,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(CONCAT(FLOOR(`Average_Compilation_Time_minute` / 60),'h ',
MOD (`Average_Compilation_Time_minute`,60),'m'),'ND'))
ELSE IFNULL(CONCAT(FLOOR(`Average_Compilation_Time_minute` / 60),'h ',
MOD (`Average_Compilation_Time_minute`,60),'m'),'ND')
END AS `Average_Compilation_Time_hour2`,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(SEC_TO_TIME(MOD (`Average_Compilation_Time_minute` * 60,86400)),'ND'))
ELSE IFNULL(SEC_TO_TIME(MOD (`Average_Compilation_Time_minute` * 60,86400)),'ND')
END AS `Average_Compilation_Time_hour`
FROM `tbl_new_Average`
GROUP BY xCode WITH ROLLUP) AS q;
+---------+---------------------------------+--------------------------------+-------------------------------+
| xxxCode | Average_Compilation_Time_minute | Average_Compilation_Time_hour2 | Average_Compilation_Time_hour |
+---------+---------------------------------+--------------------------------+-------------------------------+
| D1E1 | 2848 | 47 | 23:28:00 |
| D2E1 | 8 | 0 | 00:08:00 |
| D2E2 | 3284 | 54 | 06:44:00 |
| D4E1 | 382 | 6 | 06:22:00 |
| D4E2 | 372 | 6 | 06:12:00 |
| D5E1 | 1481 | 24 | 00:41:00 |
| D5E2 | 5703 | 95 | 23:03:00 |
| D6E1 | 841 | 14 | 14:01:00 |
| D6E2 | 3 | 0 | 00:03:00 |
| Total | 1658 | 27 | 8.666666666666666 |
+---------+---------------------------------+--------------------------------+-------------------------------+
10 rows in set
更新2
没看懂...
使用excel AVG 是
于 Mysql
23:28:00
00:08:00
06:44:00
06:22:00
06:12:00
00:41:00
23:03:00
14:01:00
00:03:00
00:18:56
create table tijd(t time);
insert into tijd values('23:28:00');
insert into tijd values('00:08:00');
insert into tijd values('06:44:00');
insert into tijd values('06:22:00');
insert into tijd values('06:12:00');
insert into tijd values('00:41:00');
insert into tijd values('23:03:00');
insert into tijd values('14:01:00');
insert into tijd values('00:03:00');
select sec_to_time(avg(time_to_sec(t))) from tijd;
输出:
+----------------------------------+
| sec_to_time(avg(time_to_sec(t))) |
+----------------------------------+
| 08:58:00.0000 |
+----------------------------------+
我使用 MySql RDBMS
mysql> SELECT VERSION();
+------------------+
| VERSION() |
+------------------+
| 8.0.17 |
+------------------+
1 row in set
我需要使用MySQL AVG() function
计算一组值的平均值。
我试过这个查询
mysql> SELECT DISTINCT
CASE WHEN xCode IS NULL THEN 'Total' ELSE xCode END AS `xCode`,
CASE WHEN xCode IS NULL THEN AVG(ROUND(IFNULL(`Average_Compilation_Time_minute`,'ND'),0))
ELSE ROUND(IFNULL(`Average_Compilation_Time_minute`,'ND'),0)
END AS `Average_Compilation_Time_minute`,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(SEC_TO_TIME(MOD (`Average_Compilation_Time_minute` * 60,86400)),'ND'))
ELSE IFNULL(SEC_TO_TIME(MOD (`Average_Compilation_Time_minute` * 60,86400)),'ND')
END AS `Average_Compilation_Time_hour`,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(CONCAT(FLOOR(`Average_Compilation_Time_minute` / 60),'h ',
MOD (`Average_Compilation_Time_minute`,60),'m'),'ND'))
ELSE
IFNULL(CONCAT(FLOOR(`Average_Compilation_Time_minute` / 60),'h ',
MOD (`Average_Compilation_Time_minute`,60),'m'),'ND')
END AS `Average_Compilation_Time_hour`,
sID
FROM `tbl_new_Average`
GROUP BY xCode WITH ROLLUP;
+-------+---------------------------------+-------------------------------+-------------------------------+-----+
| xCode | Average_Compilation_Time_minute | Average_Compilation_Time_hour | Average_Compilation_Time_hour | sID |
+-------+---------------------------------+-------------------------------+-------------------------------+-----+
| D1E1 | 2848.0000 | 23:28:00 | 47h 28m | 1 |
| D2E1 | 8.0000 | 00:08:00 | 0h 8m | 2 |
| D2E2 | 3284.0000 | 06:44:00 | 54h 44m | 3 |
| D4E1 | 382.0000 | 06:22:00 | 6h 22m | 4 |
| D4E2 | 372.0000 | 06:12:00 | 6h 12m | 5 |
| D5E1 | 1481.0000 | 00:41:00 | 24h 41m | 6 |
| D5E2 | 5703.0000 | 23:03:00 | 95h 3m | 7 |
| D6E1 | 841.0000 | 14:01:00 | 14h 1m | 8 |
| D6E2 | 3.0000 | 00:03:00 | 0h 3m | 9 |
| Total | 1658.0000 | 8.666666666666666 | 27.333333333333332 | 9 |
+-------+---------------------------------+-------------------------------+-------------------------------+-----+
10 rows in set
但是我在 return Average_Compilation_Time_hour
列上有两个不同的结果集
第 Average_Compilation_Time_hour
列中的正确平均值是什么?
在最后一行,我需要这种格式的 AVG HH:mm:ss
请帮忙?
非常感谢
下面是我的代码
DROP TABLE
IF EXISTS `tbl_new_Average`;
CREATE TABLE `tbl_new_Average` (
`xCode` VARCHAR (255) DEFAULT NULL,
`Average_Compilation_Time_minute` INT (11) DEFAULT NULL,
`Average_Compilation_Time_hour` CHAR (8) DEFAULT NULL,
`sID` INT (11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`sID`)
) ENGINE = MyISAM DEFAULT CHARSET = latin1;
INSERT INTO `tbl_new_Average` VALUES('D1E1','2848','23:28:00','1');
INSERT INTO `tbl_new_Average` VALUES('D2E1','8','00:08:00','2');
INSERT INTO `tbl_new_Average` VALUES('D2E2','3284','06:44:00','3');
INSERT INTO `tbl_new_Average` VALUES('D4E1','382','06:22:00','4');
INSERT INTO `tbl_new_Average` VALUES('D4E2','372','06:12:00','5');
INSERT INTO `tbl_new_Average` VALUES('D5E1','1481','00:41:00','6');
INSERT INTO `tbl_new_Average` VALUES('D5E2','5703','23:03:00','7');
INSERT INTO `tbl_new_Average` VALUES('D6E1','841','14:01:00','8');
INSERT INTO `tbl_new_Average` VALUES('D6E2', '3', '00:03:00', '9');
更新
mysql> SELECT
COALESCE(xCode,'Total') AS xxxCode,
ROUND(`Average_Compilation_Time_minute`,0) AS `Average_Compilation_Time_minute`,
ROUND(`Average_Compilation_Time_hour2`,0) AS `Average_Compilation_Time_hour2`,
`Average_Compilation_Time_hour` AS `Average_Compilation_Time_hour`
FROM (
SELECT xCode,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(`Average_Compilation_Time_minute`,'ND'))
ELSE IFNULL(`Average_Compilation_Time_minute`,'ND')
END AS `Average_Compilation_Time_minute`,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(CONCAT(FLOOR(`Average_Compilation_Time_minute` / 60),'h ',
MOD (`Average_Compilation_Time_minute`,60),'m'),'ND'))
ELSE IFNULL(CONCAT(FLOOR(`Average_Compilation_Time_minute` / 60),'h ',
MOD (`Average_Compilation_Time_minute`,60),'m'),'ND')
END AS `Average_Compilation_Time_hour2`,
CASE WHEN xCode IS NULL THEN AVG(IFNULL(SEC_TO_TIME(MOD (`Average_Compilation_Time_minute` * 60,86400)),'ND'))
ELSE IFNULL(SEC_TO_TIME(MOD (`Average_Compilation_Time_minute` * 60,86400)),'ND')
END AS `Average_Compilation_Time_hour`
FROM `tbl_new_Average`
GROUP BY xCode WITH ROLLUP) AS q;
+---------+---------------------------------+--------------------------------+-------------------------------+
| xxxCode | Average_Compilation_Time_minute | Average_Compilation_Time_hour2 | Average_Compilation_Time_hour |
+---------+---------------------------------+--------------------------------+-------------------------------+
| D1E1 | 2848 | 47 | 23:28:00 |
| D2E1 | 8 | 0 | 00:08:00 |
| D2E2 | 3284 | 54 | 06:44:00 |
| D4E1 | 382 | 6 | 06:22:00 |
| D4E2 | 372 | 6 | 06:12:00 |
| D5E1 | 1481 | 24 | 00:41:00 |
| D5E2 | 5703 | 95 | 23:03:00 |
| D6E1 | 841 | 14 | 14:01:00 |
| D6E2 | 3 | 0 | 00:03:00 |
| Total | 1658 | 27 | 8.666666666666666 |
+---------+---------------------------------+--------------------------------+-------------------------------+
10 rows in set
更新2
没看懂...
使用excel AVG 是
于 Mysql
23:28:00
00:08:00
06:44:00
06:22:00
06:12:00
00:41:00
23:03:00
14:01:00
00:03:00
00:18:56
create table tijd(t time);
insert into tijd values('23:28:00');
insert into tijd values('00:08:00');
insert into tijd values('06:44:00');
insert into tijd values('06:22:00');
insert into tijd values('06:12:00');
insert into tijd values('00:41:00');
insert into tijd values('23:03:00');
insert into tijd values('14:01:00');
insert into tijd values('00:03:00');
select sec_to_time(avg(time_to_sec(t))) from tijd;
输出:
+----------------------------------+
| sec_to_time(avg(time_to_sec(t))) |
+----------------------------------+
| 08:58:00.0000 |
+----------------------------------+