2016-07-01 5 views
3

OK]をクリックして、私は1つのテーブル表Aそれを呼び出すと、データベースを持って検討してください。 表A Have Id int、sum int。 私は合計値の平均よりも大きいテーブルAの合計値が必要です。私は2つのクエリ作っこのためストレンジ(不明)MySQLの行動

:私はそれを参照してください

SELECT 
    a.id 
FROM 
    TableA a, 
    (SELECT AVG(sum) AS mes FROM TableA) b 
WHERE 
    a.sum>b.mes; 


SELECT 
    a.id 
FROM 
    TableA a 
WHERE 
    a.sum > (SELECT AVG(a.sum)) 
GROUP BY 
    a.id; 

方法をこれらのクエリは同じですが、結果は、第二のための第1およびNullのためのOKです。私の質問は簡単です

、2番目のクエリの論理エラーはありますか?はいの場合、誰かが理由を説明できますか?

答えて

3

はい、これらの2つのクエリは同じではありません。最初のクエリでは2つのテーブルとして扱い、結果セットを取得して最終的に比較するためです。

が、あなたが、その場合には、集計関数を実行する2番目のクエリでは、あなたは論理エラーがあり

Select a.id from TableA a where a.sum = (Select avg(a.sum)) group by a.id; 
+0

だから、2番目のクエリでは、私はその結果セットを持つ別のテーブルではなくて、テーブルから結果セットを比較することを意味? – HasS

+0

答えはそう、それはグループがa.idを使用し、その平均値がその値に等しくなりますので –

+0

を確認してください更新しました真のですが、私はその値以上のために比較しようとして簡単なテストをした、あなたが上記で説明したように、結果は、同じgroup by句から得たすべての値である:Dのthnxあなたの答えのために –

2

あなたは私が何を意味するか理解し、これを実行する個々のa.idため

を平均取得します。 2番目のクエリは2つのテーブルを処理しません。

関連する問題