webentwicklung-frage-antwort-db.com.de

Fehler vermeiden "Aggregatfunktionen sind in WHERE nicht zulässig"

Dieser SQL-Code wirft eine 

aggregatfunktionen sind in WHERE nicht zulässig

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;

Wie kann ich diesen Fehler vermeiden?

33
D-Lef

Ersetzen Sie WHERE-Klausel durch HAVING wie folgt:

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 ähnelt WHERE, dh beide werden zum Filtern der resultierenden Datensätze verwendet. HAVING wird zum Filtern nach aggregierten Daten verwendet (wenn GROUP BY verwendet wird).

66
Aziz Shaikh

Verwenden Sie HAVING-Klausel anstelle von WHERE

Versuche dies: 

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

Wird Self Join einen Join mit Join ausführen, wenn die Bedingung besteht, dass Preise angegeben werden, die über dem Median der in der Auftragstabelle aufgeführten Preise liegen?

Z.B. order_item, Order_Price 

Da Aggregatfunktionen nicht in einer WHERE-Klausel verwendet werden können>

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