Comment éviter l'erreur " les fonctions d'agrégation ne sont pas autorisées dans WHERE"

Ce code sql lance un

Les fonctions D'agrégation ne sont pas autorisées dans où

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;

Comment puis-je éviter cette erreur?

29
demandé sur Félix Gagnon-Grenier 2014-01-08 13:34:20

3 réponses

Remplacez la clause WHERE par HAVING, comme ceci:

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 est similaire à WHERE, c'est les deux sont utilisés pour filtrer les enregistrements résultant de l'opération, mais HAVING est utilisé pour filtrer les données agrégées (lorsque GROUP BY est utilisé).

57
répondu Aziz Shaikh 2014-01-08 09:41:15

Utilisez la clause HAVING au lieu de WHERE

, Essayez ceci:

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
répondu Saharsh Shah 2014-01-08 09:43:44

Auto jointure aller pour un tirage au sort avec une jointure où nous avons une condition à la liste des prix qui sont supérieures à la médiane des prix indiqués dans le tableau de commande?

Par exemple. order_item, Order_Price

Puisque les fonctions d'agrégat ne peuvent pas être utilisées dans une clause 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
répondu user7872783 2017-04-16 17:07:24