• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL WHERE, HAVING について)

SQL WHERE, HAVINGについて

このQ&Aのポイント
  • SQLのWHERE句とHAVING句について説明します。
  • WHERE句はGROUP BY句よりも前に評価されるため、グループ化された結果を利用できません。
  • HAVING句はGROUP BY句によってグループ化されたデータに対し、絞り込みの条件を指定することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

where句は group by句の前段階で行単位に対して実行されるフィルタ処理で, having句は group by句の後段階でグループ化単位に対して実行されるフィルタ処理。 -------- (C) SELECT cat_id, MAX(price) FROM itemlist WHERE cat_id = 20 GROUP BY cat_id は,次のような流れになります。 ↓ □where …cat_id = 20 の行だけを次段階へ送る ↓ □group by …cat_idでグループ化 (今回は,全行がcat_id=20なので1グループになります) ↓ □having …(無し) ↓ □select …グループ単位でmax(price)を表示 -------- > (B) SELECT cat_id, MAX(price) FROM itemlist > HAVING cat_id = 20 GROUP BY cat_id は間違いです。group by句とhaving句は次の順に指定しなければなりません。 SELECT cat_id, MAX(price) FROM itemlist GROUP BY cat_id HAVING cat_id = 20 上記の修正後は,次のような流れになります。 ↓ □where …(無し) ↓ □group by …cat_idでグループ化(複数グループになります) ↓ □having …cat_id=20のグループだけを次段階へ送る ↓ □select …グループ単位でmax(price)を表示 -------- > WHERE のターゲットがグループ関数で得られた値 > で条件指定するわけではないので文法的にも正しく > おなじ結果が得られる > こういう解釈でよろしいのでしょうか? はい,その解釈でよいでしょう。

noname#173931
質問者

お礼

お礼が遅れてしまい申しわけありません いつも解説していただきありがとうございます。 GROUP BY、HAVING の利用の仕方を教えていただき 参考にさせていただきます。 文法的な解釈のしかたについての あやふやな部分も確認していただき 理解を深めることができました。 貴重な時間をさいての回答、ありがとうございました。

すると、全ての回答が全文表示されます。

専門家に質問してみよう