[英]MySQL: How do I get the AVG value in one column for entries sharing distinct values in another column?
对于这样的表:
id num grp
1 12.3 group1
2 2.4 group2
3 7.6 group2
4 4.5 group1
5 8.9 group1
6 12.6 group1
7 1.1 group2
8 7.8 group1
我想将另一个列输出到结果网格,该列在grp值为group1的所有行中的值为9.22,在grp值为group2的所有行中的值为3.7。 因此,在每种情况下,具有相同grp值的所有行的平均num值。
我还在学习MySQL。 我想我基本上知道我需要的组件(AVG,DISTINCT / GROUP BY,可能还有一个自我联接?),但是我一直在努力寻找将它们组合在一起的正确方法。
您可以使用AVG
GROUP BY
,然后使用同一表进行JOIN
来尝试以下查询吗?您可以按期望获得额外的列值:
SELECT TA.id, TA.num, TA.grp , AG.AvgNum
FROM ( SELECT grp, AVG(num) AS AvgNum
FROM TableName
GROUP BY grp ) AG
JOIN TableName TA ON TA.grp = AG.grp
Rextester演示: http://rextester.com/SZW95037
://rextester.com/SZW95037
使用JOIN
连接表和查询,该查询通过GROUP BY
子句返回聚合值。
SELECT id, num, avg_num, grp
FROM
MyTable
LEFT JOIN
(SELECT AVG(num) AS avg_num, grp
FROM MyTable
GROUP BY grp) grouped
USING(grp);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.