2012-11-04 73 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类型= '打印机')