2

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

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

4

3 回答 3

5

这是一种方法:

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

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

于 2013-01-17T15:22:15.300 回答
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
于 2013-01-17T15:20:32.897 回答
2

在第一次查询期间,您要询问平均高度,并且它正在针对第一条记录(Harry)打印平均高度。在第二个查询中,您要询问按姓名分组的组中所有学生的平均身高。现在,在您的情况下,您有四个组,每个组仅包含一条记录,因为没有重复的名称,因此一条记录的平均高度将作为该记录本身的高度。

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

SELECT name, height, (SELECT AVG(height) FROM mytable) AS average_height 
FROM mytable;
于 2013-01-17T15:32:23.783 回答