2010-11-21 14 views
0

J'essaie de récupérer les informations suivantes: Pour chaque client dont le montant moyen de la commande est supérieur à 1 800 $, indiquez le nom du client, le numéro de client et le nombre total de commandes.SQL Récupération question

mon code est actuellement.

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

LES TABLES ET DOMAINES DE BASE DE DONNÉES MA

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

Répondre

0

Vous devez utiliser JOIN notation et une clause HAVING de comparer l'ensemble; vous n'avez pas besoin de la table des éléments de commande:

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 

(Ordre du GROUP BY fixe par commentaire par GolezTrol - merci, mon excuse est qu'il était tard dans la nuit.)

+0

Je pense que vous avez besoin mettre GROUP BY au-dessus d'avoir. – GolezTrol

+0

Si je devais aller sur la récupération des informations sur le nombre total d'entrepôts pour les commandes expédiées à partir d'au moins deux entrepôts. N'aurais-je pas besoin d'une clause imbriquée? – Meat

+0

@Meat: Cela ressemble à une autre requête de clause GROUP BY et HAVING sur deux tables avec une jointure directe - presque isomorphe avec la requête existante. –