2010-11-21 17 views
0

次の情報を取得しようとしています。 平均注文額が1,800ドルを超える顧客ごとに、顧客名、顧客番号、および注文総数を記載します。SQL検索の質問

私の現在のコードです現在、 MY DATABASE

 
customer(cust#:char(3), cname:varchar(30), city:varchar(20)) 
order (order# :char(4), odate, cust#:char(3), ord_amt:decimal(10.2)) 
order_item(order# :char(4), item#: char(4), qty:int(11)) 
item(item# :char(4), unit_price:decimal(10.2)) 
shipment(order# :char(4), warehouse# :char(4), ship_date:date) 
warehouse (warehouse#: char(4), city:varchar(20)) 

答えて

0

TO

SELECT c.cname, c.`cust#`, COUNT(oi.`order#`) 
FROM CUSTOMER c, `ORDER` o, `ORDER_ITEM` oi 
WHERE c.`cust#` = o.`cust#` 
AND o.`order#` = oi.`order#` 
AND AVG(o.`ord_amt`) > 1800 
GROUP BY c.cname, c .`cust#` 

テーブルとフィールドあなたは表記と集計を比較することJOIN句を使用する必要があります。あなたは、注文項目のテーブルを必要としません:

SELECT c.cname, c.`cust#`, COUNT(oi.`order#`) 
    FROM CUSTOMER c JOIN `ORDER` o ON c.`cust#` = o.`cust#` 
GROUP BY c.cname, c .`cust#` 
HAVING AVG(o.`ord_amt`) > 1800 

(GROUP BYの順序とGolezTrolでコメントごとに固定HAVING - おかげで、私の言い訳は、それが夜遅くだったということです。)

+0

私はあなたが必要だと思いますGROUP BYをHAVINGの上に置きます。 – GolezTrol

+0

少なくとも2つの倉庫から出荷された注文の倉庫総数の情報を取得する場合は、ネストされた句は必要ないでしょうか? – Meat

+0

@Meat:これは、直接結合を持つ2つのテーブルの別のGROUP BY句とHAVING句のように聞こえます。既存のクエリとほぼ同型です。 –