2012-11-04 103 views
4

只是一個實踐問題,有點混亂我會很感激,如果有人能清楚這件事..MySQL查詢返回AVG

我有一個DB稱爲產品和另一個叫PC。我試圖執行一個查詢「找到PC的硬盤平均大小爲所有制造商誰也使打印機」

這裏是我的代碼:

SELECT maker, AVG(hd) 
FROM pc, product 
WHERE pc.model=product.model 
GROUP BY maker 
HAVING COUNT(type='PR')>=1 

類型產品的屬性,它要麼是代表打印機(PR)的筆記本電腦,要麼是PC,但是HAVING聲明似乎沒有單獨列出生產打印機的製造商,而是我在產品表中爲每個製造商取回AVG。

UPDATE

這是個什麼關係是這樣的:

Product(maker, model, type) 
PC(model, hd, speed, ram, price) 
Printer(model, color, type, price) 

回答

4

嘗試以下查詢:

SELECT maker, AVG(hd) FROM PC, Product 
WHERE PC.model=Product.model 
AND Product.maker IN 
    (SELECT DISTINCT maker FROM Product WHERE type='PR') 
GROUP BY Product.maker; 

演示:http://sqlfiddle.com/#!2/abfaa/2

您只需添加一個條件,以確保製造商是至少有一個打印機產品的製造商之一。然後您由製造商分組以找出個人平均值。

1

所有這些製造商誰使打印機:一臺PC的

SELECT maker 
    FROM product 
    WHERE type = 'PR' 
GROUP BY maker; 

硬盤平均大小爲所有那些也製造打印機的製造商

SELECT p.maker, AVG(pc.hd) avg_hd_size 
    FROM 
     (
    SELECT maker 
    FROM product 
    WHERE type = 'PR' 
GROUP BY maker 
     ) g 
    JOIN product p on p.maker = g.maker 
    JOIN pc on pc.model = p.model 
GROUP BY p.maker; 
0

SELECT壺,AVG(HD)

FROM PC INNER JOIN產品

ON PC.model = Product.model

GROUP BY製造商

HAVING製造者IN(SELECT DISTINCTFROM產品WHERE類型= '打印機')