我有一个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
如何在单个查询中获取平均值和所有行。
答案 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;