web-dev-qa-db-ja.com

「集計関数はWHEREで許可されていません」というエラーを回避する方法

このSQLコードは

集計関数はWHEREでは許可されていません

SELECT o.ID ,  count(p.CAT)
FROM Orders o
INNER JOIN Products p ON o.P_ID = p.P_ID 
WHERE count(p.CAT) > 3
GROUP BY o.ID;

このエラーを回避するにはどうすればよいですか?

43
D-Lef

次のように、WHERE句をHAVINGに置き換えます。

SELECT o.ID ,  count(p.CAT)
FROM Orders o
INNER JOIN Products p ON o.P_ID = p.P_ID 
GROUP BY o.ID
HAVING count(p.CAT) > 3;

HAVINGWHEREに似ています。両方とも結果レコードのフィルタリングに使用されますが、HAVINGは集約データのフィルタリングに使用されます(GROUP BY 使用されている)。

76
Aziz Shaikh

HAVINGの代わりにWHERE句を使用します

これを試して:

SELECT o.ID, COUNT(p.CAT) cnt
FROM Orders o
INNER JOIN Products p ON o.P_ID = p.P_ID 
GROUP BY o.ID HAVING cnt > 3
5
Saharsh Shah

自己結合は、注文テーブルにリストされた価格の中央値よりも高い価格をリストする条件がある場合、結合でトスになりますか?

例えば。 order_item、Order_Price

集計関数はWHERE句で使用できないため>

select a.order_item_product_price, count(distinct 
a.order_item_product_price) from 
default.order_items a , default.order_items b
where a.order_item_product_price = b.order_item_product_price
group by a.order_item_product_price
having a.order_item_product_price > appx_median(b.order_item_product_price)
order by a.order_item_product_price limit 10
0
user7872783