2

我有以下数据库架构:

Customer(ssn, name, gender, city)
Vehicle(vin, make, model, year)
BuyVehicle(bvssn, bvvin, price, year)

BuyVehicle.bvvin外键从哪里来,Vehicle.vinBuyVehicle.bvssn外键从哪里来Customer.ssn。我正在尝试选择以高于该特定车辆平均价格的价格购买车辆的人的姓名。

到目前为止,我已经确定了如何计算车辆的平均值:

SELECT AVG(price) as avg_price, v.maker, v.model, v.year FROM BuyVehicle bv, Vehicle v, Customer c WHERE v.vin = bv.BVVIN AND c.ssn = bv.bvssn GROUP BY maker, model, year;

我试图在子句中输入一个price > avg_price条件:WHERE

SELECT AVG(price) as avg_price, v.maker, v.model, v.year FROM BuyVehicle bv, Vehicle v, Customer c WHERE v.vin = bv.BVVIN AND c.ssn = bv.bvssn AND bv.price > avg_price GROUP BY maker, model, year;

但 MySQL 告诉我该avg_price列不存在。我对这个问题采取了错误的方法吗?

4

2 回答 2

8

您需要使用:

SELECT AVG(price) as avg_price, v.maker, v.model, v.year, bv.price 
FROM BuyVehicle bv, Vehicle v, Customer c WHERE v.vin = bv.BVVIN AND c.ssn = bv.bvssn
GROUP BY maker, model, year
having bv.price > avg_price
于 2012-10-07T21:36:54.393 回答
0

使用聚合时,您需要使用一个名为“HAVING”的单独子句,该子句在 group by 之后,但看起来您尝试编写的查询实际上比这更复杂。

你想在结果中看到什么?

我怀疑你需要用平均值对子查询做一个 where 来得到我猜你想要的东西

于 2012-10-07T21:39:54.117 回答