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 に答える