【发布时间】:2013-01-01 04:16:57
【问题描述】:
我有一个 MySQL 表,其中包含三列 id、name 和 height。
我想运行一个查询来返回所有条目的名称和高度,以及所有条目的平均高度。所有这些事情都必须在一个查询中完成。
这是我尝试过的。
SELECT name, height, avg(height) as average_height FROM mytable
这个查询只返回一行,但平均高度是正确的。
name height average_height
--------------------------------
Harry 165 169.5
然后我尝试了这个查询
SELECT name, height, avg(height) as average_height FROM mytable GROUP BY name
然后它返回所有行,但平均值不正确
name height average_height
--------------------------------
Harry 165 165
Tom 170 170
George 180 180
Raj 163 163
如何在单个查询中获取平均值以及所有行。
【问题讨论】:
-
这些是两个不同的函数(一个聚合和一个列表),您最多可以合并两个单独的查询并将平均值作为第一行/最后一行,但是因为您正在查找所有信息无论如何,为什么不只计算 MySQL 之外的平均值?
-
@Rudu,正如几个答案所示,使用连接或子查询产生所需的结果并不难。从技术角度来看,这没有问题。虽然尚不清楚为什么 OP 想要这样做,但在很多情况下,这样的操作是有意义的。例如,如果您想要一列列出一个人相对于平均值的身高,则需要将平均身高连接到每一行。
标签: mysql database select average