首页 > 解决方案 > 如何计算条件语句中由另一列分组的mySQL中的列的平均值?

问题描述

我需要计算第二列具有相同值的一列的平均值。例如,您有

Col1 | Col2
a    | 2
a    | 9
b    | 6
b    | 10

我需要检索按 Col1 分组的 Col2 的平均值,即 (9+2)/2 和 (6+10)/2。我可以在自己的单独查询中检索它,但它是平均值必须大于 7 的条件的一部分。mySQL 中的示例代码是

SELECT Col1, AVG(Col2) FROM tableName
GROUP BY Col1;

SELECT Col1 FROM tableName
WHERE (SELECT AVG(Col2) GROUP BY Col1) >= 7;

第一个查询正确地给了我按 Col1 分组的 Col2 的平均值,但第二个查询只是取整个 Col2 的平均值并返回大于所有列的计算平均值的值。为什么第二个查询不按 col1 分组,我应该如何更改我的代码以正确分组元组?

标签: mysqlsqlaverageaggregate-functionshaving-clause

解决方案


你似乎想要一个having子句:

select col1, avg(col2) as avg_col2
from tablename
group by col1
having avg(col2) >= 7

MySQL 在having子句中支持列别名(这是对 SQL 标准的扩展),因此您可以将其简化为:

having avg_col2 >= 7

推荐阅读