実現したいこと
以下のようなテーブルがあり、
「クラスの75%以上の生徒が80点以上のクラス」を取得するという問題があります。
正解のSQLは、Bクラスのみが取得できるようになります。
この問題について、一度自分で考えてみたSQLでは結果が取得できませんでした。
ただ、どうしてもなぜ結果が取得できないのかわからないため、どなたかご教授お願い致します。
まず、正解のSQLは以下のようなものでこれでBクラスのみが取得できます。
select class
from testresults
group by class
having 0.75 * count(*) <= sum(case when score >= 80 then 1 else 0 end)
一方で私が考えた以下のSQLでは「0 rows affected」となり、1件も取得できませんでした。
select class
from testresults
group by class
having 0.75 <= sum(case when score >= 80 then 1 else 0 end) / count(*)
2つのSQLで違うところはhaving句の中でcount(*)が
左辺にあるか、右辺にあるかだけです。
そのため、同じ結果(Bクラスが取得できる)になると思っているのですが、
同じ結果になりません。何故だかわかる方ご教授お願い致します。
試したこと
演算子の優先順位について調べてみたのですが、掛け算割り算のほうが
不等号よりも優先して処理されるので、やはり同じ結果になるのではと思っただけでした。
補足情報(FW/ツールのバージョンなど)
使用しているデータベースは「PostgreSQL13」です。
ご不明点がありましたら、ご指摘ください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/04/10 23:02