HAVING句の後にWHERE句を使用することはできますか?
最初に頭に浮かぶのはサブクエリですが、よくわかりません。
P.S.答えが肯定的である場合、いくつかの例を挙げていただけますか?
いいえ、同じクエリではありません。
where
句は、having
とgroup by
の前にあります。グループ化する前にレコードを除外する場合は、条件がwhere
句になり、グループ化されたレコードを除外する場合は、条件がhaving
句になります。
select ...
from ...
where ...
group by ...
having ...
なんらかの奇妙な理由でこれらのどちらも使用できない場合は、クエリをサブクエリにして、外部クエリにwhere
句を配置できるようにする必要があります。
select ...
from (
select ...
from ...
where ...
group by ...
having ...
) x
where ...
HAVING句は、GROUPBYの後の単なるWHERE句です。 WHERE条件をHAVING句に入れてみませんか?
それがトリックの質問である場合、WHEREとHAVINGが、前述のように、サブクエリで同じレベルにない可能性があります。
私はそのようなものがうまくいくと思います
HAVING value =(SELECT max(value)FROM foo WHERE crit = 123)
p.s。:なぜあなたは尋ねたのですか?特定の問題がありますか?
p.s.s:わかりました、ばかげています、「インタビュー*」タグを見逃しました...
SELECTヘルプから
WHERE、GROUP BY、およびHAVING句の処理順序次の手順は、WHERE句、GROUP BY句、およびHAVING句を含むSELECTステートメントの処理順序を示しています。
FROM句は初期結果セットを返します。
WHERE句は、検索条件を満たさない行を除外します。
GROUP BY句は、GROUP BY句の一意の値ごとに、選択した行を1つのグループに収集します。
選択リストで指定された集計関数は、各グループの要約値を計算します。
HAVING句は、検索条件を満たさない行をさらに除外します。
だから、あなたはできません。
同じ範囲内で、答えはノーです。サブクエリが許可されている場合は、HAVING
の使用を完全に回避できます。
HAVING
は時代錯誤だと思います。 Hugh Darwenは、HAVING
を「構造化クエリの愚かさ」と呼んでいます。
古いSQLでは、集計結果に
WHERE
句を使用できなかったため、HAVING
(WHERE
と同じ意味)を発明する必要がありました。SELECT D#, AVG(Salary) AS Avg_Sal FROM Emp GROUP BY D# HAVING AVG(Salary) > 999;
しかし、1979年に次のように書くことができれば、
HAVING
があったと思います。SELECT * FROM ( SELECT D#, AVG(Sal) AS Avg_Sal FROM Emp GROUP BY D# ) AS dummy WHERE Avg_Sal > 999;
ダーウェンの質問に対する答えはノーだと強く思う。