在我的SQL期末考试中,有一个问题是:
显示客户ID,客户下订单的次数以及客户已支付的平均运费金额四舍五入到小数点后两位。仅显示平均运费大于5美元的结果。
我的回答:
SELECT c.customer_id,
COUNT(o.order_id) AS 'number_of_orders',
ROUND(AVG(o.ship_amount), 2) AS 'ave_shipping_amount'
FROM customers c JOIN orders o
ON c.customer_id = o.customer_id
GROUP BY c.customer_id;
我在WHERE ave_shipping_amount > 5
之上尝试了GROUP BY
,但由于ave_shipping_amount列不存在,因此无法正常工作。
我也尝试了WHERE ROUND(AVG(o.ship_amount), 2) > 5
,但这是对组函数的错误使用。
如何解决这个问题?这看起来很基本,但是我疯了才想弄清楚。
答案 0 :(得分:2)
你需要使用HAVING:
HAVING ROUND(AVG(o.ship_amount), 2) > 5
它就像一个WHERE子句,除了它在聚合后计算