2010-11-21 5 views
0

Ich versuche, die folgenden Informationen abzurufen: Für jeden Kunden, deren durchschnittliche Bestellsumme größer als $ 1.800 ist, den Kundennamen, cust # und Gesamtzahl der Bestellungen auflisten.SQL Retrieval Frage

Mein Code ist derzeit.

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#` 

DIE Tabellen und Felder der Datenbank

 
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)) 

Antwort

0

Sie Notation JOIN verwenden sollte und eine HAVING-Klausel das Aggregat zu vergleichen; Sie brauchen nicht auf die Auftragspositionen Tabelle:

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 

(Order of GROUP BY und durch GolezTrol pro Kommentar fixiert ist - dank, meine Entschuldigung ist, dass es spät in der Nacht war.)

+0

Ich glaube, Sie brauchen GROUP BY über HAVING setzen. – GolezTrol

+0

Wenn ich die Informationen über die Gesamtzahl der Lagerhäuser für Bestellungen aus mindestens zwei Lagerhäusern abrufen würde. Brauche ich keine verschachtelte Klausel? – Meat

+0

@Meat: Das klingt nach einer anderen GROUP BY- und HAVING-Klausel-Abfrage an zwei Tabellen mit einem direkten Join - fast isomorph mit der vorhandenen Abfrage. –