Ce code SQL jette un
les fonctions d'agrégat ne sont pas autorisées dans 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;
Comment puis-je éviter cette erreur?
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
, les deux sont utilisés pour filtrer les enregistrements résultants mais HAVING
est utilisé pour filtrer les données agrégées (lorsque GROUP BY
est utilisé).
Utilisez la clause HAVING
au lieu de WHERE
Essaye ça:
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
Est-ce que l'auto-joint va se lancer dans un jeté avec nous si nous avons une condition pour lister les prix supérieurs à la médiane des prix indiqués dans le tableau des commandes?
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