mysql - 如何在单个 MySQL 查询中选择多个平均值?

标签 mysql mariadb average

我需要从表中选择多个时间平均值。我可以使用多个查询来完成此操作,但我想知道如何将所有查询统一到一个查询中。

例如,我有这张表:

------------------------------------------------
| id | number |   name   |    date    | duration |
-------------------------------------------------
| 1  |    2   | SOMENAME | 2019-07-01 | 02:34:33 |
| 2  |    3   | SOMETHIN | 2019-03-05 | 01:54:31 |
| 3  |    2   | ANEWNAME | 2018-09-21 | 04:17:43 |
| 4  |    2   | SOMENAME | 2019-07-11 | 02:33:07 |
-------------------------------------------------

我的疑问:

SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(duration))) FROM mytable where number='2' and date LIKE '%2019-07%';
SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(duration))) FROM mytable where number='2' and date BETWEEN '2018-07-31 23:59:59' AND '2019-07-31 23:59:59';
SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(duration))) FROM mytable where number='2' and date BETWEEN '2018-07-31 23:59:59' AND '2019-07-31 23:59:59' and name like '%SOMENAME%' and duration > '00:00:01' group by name;

我已经尝试过,但没有成功:

SELECT SEC_TO_TIME(AVG(TIME_TO_SEC(duration))) FROM mytable where number='2' and (date LIKE '%2019-07%' OR date BETWEEN '2018-07-31 23:59:59' AND '2019-07-31 23:59:59' OR date BETWEEN '2018-07-31 23:59:59' AND '2019-07-31 23:59:59' and name like '%SOMENAME%')

我想在单个查询中执行相同的查询,在平均值的左侧添加一个新列,并在其上添加自定义值。例如:

------------------------
|description | average  |
------------------------
| month avg  | 02:33:11 |
------------------------
|  year avg  | 02:17:19 |
------------------------
| year avg2  | 02:52:26 |
------------------------

你有什么提示吗?

最佳答案

您实际上可以在平均值中包含条件语句。例如

SEC_TO_TIME(AVG( IF(date LIKE '%2019-07%', TIME_TO_SEC(duration), NULL) )) as avgA, 
SEC_TO_TIME(AVG( IF(date BETWEEN '2018-07-31 23:59:59' AND '2019-07-31 23:59:59', TIME_TO_SEC(duration), NULL) )) as avgB, 
SEC_TO_TIME(AVG( IF(date BETWEEN '2018-07-31 23:59:59' AND '2019-07-31 23:59:59'  and name like '%SOMENAME%' and duration > '00:00:01', TIME_TO_SEC(duration), NULL) )) as avgC 

这只会对与日期条件匹配的行进行平均,因为平均中会忽略空值。

关于mysql - 如何在单个 MySQL 查询中选择多个平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57357426/

相关文章:

mysql - SQL (MySQL) 统计每个类(class)一个人的平均数

mysql - SELECT * FROM tbl WHERE clm LIKE CONCAT ('%' ,<other sql query LIMIT 1> ,'%' ) - 怎么做?

mysql - 如何使用 PHPMyAdmin 在两个表之间创建关系?

mysql - 是否可以使此查询正常工作?

mysql - 从 PostgreSQL 翻译到 MariaDB 的这个查询有什么问题?

elasticsearch - 如何在yii2 Elasticsearch 上选择平均值

python - 如何使用Python将变量传递到MySQLdb查询中?

php - Magento 目录规则违反 MySQL 完整性约束错误

mysql - 如何防止在 ALTER 不相关表期间整个服务器被锁定?

matlab - 通过插入相邻元素平均值来扩展 2*2 矩阵