Как избежать ошибки "агрегатные функции не допускаются в 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;

Как избежать этой ошибки?

3 ответов


заменить 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;

HAVING похож на WHERE, то есть оба используются для фильтрации результирующих записей, но HAVING используется для фильтрации агрегированных данных (при GROUP BY используется).


использовать 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

будет ли self join идти на бросок с join, где у нас есть условие для перечисления цен, которые больше медианы цен, перечисленных в таблице order?

например. 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