0

having 句の使用中に問題が発生しました。次の 2 つのクエリは、理解できない理由でエラーを生成します。

次のクエリでは、次のエラーが生成されます:不明な列 'number' in 'having clause'

select avg(number),name from test
group by name
having avg(number) < number

次に、次のクエリで次のエラーが生成されます: Unknown column 'number' in 'having clause'

select name from test 
group by name
having number=min(number)

テーブルnumberに列があるときにこれらのエラーが発生するのはなぜですか?test

4

1 に答える 1

1

HAVINGGROUP BY句にリストされている集約された列でのみ動作します。WHEREこの場合の代わりにHAVING、相関クエリを使用して、次のようMIN(number)にします。

SELECT name 
FROM test 
WHERE number = (SELECT MIN(number) FROM test)
GROUP BY name

編集:HAVINGにリストされていない列では使用できないため、最初のクエリが機能しないのと同じ理由です。GROUP BY最初のクエリと同じ結果を取得したい場合は、次のように記述します。

SELECT AVG(t1.number), t1.name 
FROM test t1
INNER JOIN 
(
   SELECT name, AVG(number) Avg
   FROM test 
   GROUP BY name
) t2 ON t1.name = t2.name AND t1.number < t2.Avg
GROUP BY name
于 2012-09-26T11:36:36.237 に答える