プロが教えるわが家の防犯対策術!

問題2 次のテーフ゛ル「tb」で、カラム「uria」が50以上のデータだけを対象にして、「bang」ごとの「uria」の平均で120以上のものだけを、「uria」の平均の多いものから表示してください。
問題のフローチャートのURLです。
http://afurieitohannei.la.coocan.jp/sns/P167mond …

さて問題に対するコマンドです。
select bang,AVG(uria) ①
FROM tb
WHERE uria>=50  ①  
GROUP BY bang    ③
HAVING AVG(uria)>=120; ②
 ORDER BY AVG(uria) DESC; ③

以上ですが
①①③②③の流れじゃないとエラーとなりますね!?
しかし 流れ的には①①②③③だと私は思いますが
以下①①②③③と強制的にやりましたが「構文エラー」となります。
select bang,AVG(uria) FROM tb WHERE uria>=50 HAVING AVG(uria)>=120 GROUP BY bang ORDER BY AVG(uria) DESC;
 
なんで①①③②③じゃないとエラーになるのですか?
よろしくお願いいたします。

A 回答 (1件)

HAVINGはグルーピングした結果をフィルタリングする条件なので、GROUP BYの後にきます。

    • good
    • 2
この回答へのお礼

早々ご回答くださいまして、ありがとうございます。
Aンス:フィルタリングする条件 
了解です。

書籍に
[HAVING]での設定する条件は、グループ化した値に対するものです。
とありますね!
GROUP BY bang    ③
HAVING AVG(uria)>=120; ②

となると、グループ化しないと②が成しないことになりますね!
ロジックに合っています。
納得です。

お礼日時:2021/06/29 16:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!