我可以从这样的记录生成一个表:
ID|Var1|Var2|Measure
1 10 13 10
1 10 15 8
1 15 13 0
...
一个ID可以有多个相同的Var2。我如何为每个 2-uple ID-Var2 生成平均值:
ID|Var2|Mean_Measure
1 13 5
1 14 8
...
2 13 7
谢谢
最佳答案
您需要使用 GROUP BY
子句将具有相同 ID
和 Var2
的行分组在一起,然后将 AVG
函数计算平均值:
SELECT t.ID, t.Var2, AVG(t.Measure) AS Mean_Measure FROM YourTable t GROUP BY t.ID, t.Var2
我可能会补充一点,GROUP BY
会极大地改变查询的输出。它还对输出添加了一些限制。首先 - 在 group by 之后,您只能在 SELECT
子句中添加表达式,其中适用以下条件:
- 该表达式是
GROUP BY
子句的一部分 - 该表达式是聚合函数的应用
在上面的示例中,t.ID 和 t.Var2 存在于 GROUP BY
子句中,AVG(t.Measure) 是聚合函数 AVG 在 t.Measure 上的应用。
在处理 WHERE
子句和 GROUP BY
时,还需要注意一些事项:
WHERE
在GROUP BY
之后应用,这通常意味着不在GROUP BY
中的表达式不能在WHERE< 中使用
子句- 如果您希望在
GROUP BY
之前过滤数据,请使用HAVING
而不是WHERE
我希望这是有道理的 - 为了获得更多更好的关于 GROUP BY 如何工作的信息 - 我建议 consulting the MySQL manual on the topic .
关于mysql - 使用 MySQL 生成 2-uple 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909203/