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