繁体   English   中英

MySQL:如何在一个列中获取AVG值,以便在另一列中共享不同值的条目?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM