MySQL在获取列的平均值方面的问题

时间:2013-01-17 15:17:51

标签: mysql database select average

我有一个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

如何在单个查询中获取平均值和所有行。

3 个答案:

答案 0 :(得分:5)

这是一种方式:

SELECT name, height, average_height FROM mytable CROSS JOIN (
   select avg(height) as average_height FROM mytable
) as avg;

SQLFiddle example(更新示例以反映使用CROSS JOIN的建议)。

答案 1 :(得分:2)

试试这个:

SELECT name, height, average_height 
FROM mytable, (SELECT AVG(height) average_height FROM mytable) A 

SELECT name, height, (SELECT AVG(height) FROM mytable) AS average_height 
FROM mytable

答案 2 :(得分:2)

在第一次查询期间,您询问平均高度及其打印平均高度与第一条记录(哈利)的关系。在第二个查询中,您要求在组中按名称分组的所有学生的平均高度。在你的情况下,你有四个组,每个组只包含一个记录,因为没有重复的名称,所以一条记录的平均高度将作为该记录本身的高度。

您要做的是打印每条记录并打印它,打印平均高度。

SELECT name, height, (SELECT AVG(height) FROM mytable) AS average_height 
FROM mytable;