2010-11-21 39 views
0

Aşağıdaki bilgileri almayı deniyorum: Ortalama sipariş miktarı 1,800 ABD Doları'ndan büyük olan her müşteri için müşteri adını, cust # ve toplam sipariş sayısını listeleyin.SQL Geri alma sorusu

kodum şu anda.

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

TABLOLAR VE ALANLAR MY VERİTABANINA Sen gösterimini JOIN kullanmalısınız

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

cevap

0

ve agrega karşılaştırmak için bir HAVING deyimi; Eğer sipariş öğeleri tablosu gerekmez:

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 Sipariş ve GolezTrol tarafından yorumun başına sabit HAVING - sayesinde; benim bahane o gece geç olmasıdır.)

+0

Sana ihtiyacım var GROUP BY'i HAVING'in üzerine koymak. – GolezTrol

+0

En az iki depodan sevk edilen siparişler için toplam depo sayısının bilgisini almak üzereydim. İç içe geçmiş bir maddeye ihtiyacım olmaz mı? – Meat

+0

@Meat: Bu, başka bir GROUP BY ve HAVING yan tümcesi sorgusu gibi, doğrudan birleştirme ile iki tabloya benziyor - varolan sorgu ile neredeyse izomorfik. –