MySQL查询返回AVG

时间:2012-11-04 04:25:35

标签: mysql sql

只是一个练习题,有点混乱我很感激,如果有人可以解决这个问题。

我有一个名为Product的数据库和另一个名为PC的数据库。我正在尝试执行一个查询“为所有制造打印机的制造商找到PC的平均硬盘大小”

这是我的代码:

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

type是Product的一个属性,它代表打印机(PR)笔记本电脑或PC,但是HAVING语句似乎并不仅仅是生产打印机的制造商,而是我为每个制造商提供AVG产品表。

更新

这就是关系的样子:

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

4 个答案:

答案 0 :(得分: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 :(得分:1)

所有制造打印机的制造商:

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

所有制造打印机的制造商的PC的平均硬盘大小

  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;

答案 2 :(得分:0)

SELECT maker,avg(hd)

FROM PC INNER JOIN 产品

开启 PC.model = Product.model

GROUP BY 制造商

拥有制造商IN( SELECT DISTINCT 制造商 FROM 产品 WHERE 类型='打印机&#39 ;)

答案 3 :(得分:-1)

select distinct maker
      ,avg(hd) as Avg_hd
  from Product
 inner join PC on (Product.model = PC.model)
 where type = 'Pc'
   and maker in (Select maker from Product where type = 'Printer')
 Group by maker