2

ID、名前、高さの 3 つの列を持つ MySQL テーブルがあります。

すべてのエントリの名前と高さ、およびすべてのエントリの平均高さを返すクエリを実行したいと考えています。これらすべてを 1 つのクエリで実行する必要があります。

これは私が試したものです。

SELECT name, height, avg(height) as average_height FROM mytable

このクエリは 1 行しか返しませんが、平均の高さは正しいです。

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

1 つの方法を次に示します。

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

最初のクエリでは、平均の高さを要求し、最初のレコード(ハリー)に対して平均の高さを出力します。2番目のクエリでは、名前でグループ化されたグループ内のすべての学生の身長の平均を求めています。ここで、あなたの場合、重複する名前がないため、それぞれが1つのレコードのみを含む、4つのグループがあります。したがって、1つのレコードの平均の高さは、そのレコード自体の高さになります。

あなたがしたいのは、各レコードを印刷し、それに対して、平均の高さを印刷することです。

SELECT name, height, (SELECT AVG(height) FROM mytable) AS average_height 
FROM mytable;
于 2013-01-17T15:32:23.783 に答える
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 に答える