18

HAVING 句の後に WHERE 句を使用することはできますか?

最初に頭に浮かぶのはサブクエリですが、よくわかりません。

PS 答えが肯定の場合、いくつか例を挙げていただけますか?

4

5 に答える 5

31

いいえ、同じクエリではありません。

where節はhavingと の前に置かれgroup byます。グループ化の前にレコードを除外したい場合は条件をwhere句に入れ、グループ化されたレコードを除外したい場合は条件をhaving句に入れます。

select ...
from ...
where ...
group by ...
having ...

where奇妙な理由でどちらも使用できない場合は、クエリをサブクエリにして、外側のクエリに句を入れることができるようにする必要があります。

select ...
from (
   select ...
   from ...
   where ...
   group by ...
   having ...
) x
where ...
于 2009-11-04T06:34:26.323 に答える
5

HAVING 句は、GROUP BY の後の単なる WHERE 句です。WHERE 条件を HAVING 句に入れてみませんか?

于 2009-11-04T06:19:07.603 に答える
5

ひっかけ問題なら、おっしゃる通りサブクエリでWHEREとHAVINGが同レベルでない場合もありえます。

私はそのようなものがうまくいくと思います

HAVING value=(SELECT max(value) FROM foo WHERE crit=123)

ps:なぜあなたは尋ねたのですか?特定の問題がありますか?

pss: ばかな私、「インタビュー*」タグを見逃していました...

于 2009-11-04T06:34:17.573 に答える
3

SELECT ヘルプから

WHERE、GROUP BY、および HAVING 句の処理順序 次の手順は、WHERE 句、GROUP BY 句、および HAVING 句を含む SELECT ステートメントの処理順序を示しています。

FROM 句は初期結果セットを返します。

WHERE 句は、検索条件を満たさない行を除外します。

GROUP BY 句は、GROUP BY 句の一意の値ごとに、選択した行を 1 つのグループに収集します。

選択リストで指定された集計関数は、各グループの集計値を計算します。

さらに、HAVING 句は、検索条件を満たさない行を除外します。

だから、できません。

于 2009-11-04T06:23:52.540 に答える