MySQL查询返回平均值

4

这只是一个练习问题,有点混淆,如果有人能帮我澄清一下就非常感谢。

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

以下是我的代码:

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

类型是产品的一个属性,可以是打印机(PR)、笔记本电脑或个人电脑。然而,HAVING语句似乎并没有仅仅单独选出生产打印机的制造商,相反,我得到了Product表中每个制造商的平均值。

更新

关系如下所示:

Product(maker, model, type)
PC(model, hd, speed, ram, price)
Printer(model, color, type, price)
5个回答

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

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

  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;

0

选择 制造商, avg(hd)

PC 内连接 产品

PC.model=Product.model

按制造商分组

制造商 IN (选择不同的 制造商 产品 其中 类型='打印机')


0

选择制造商,平均硬盘容量为"average HDD capacity" 从产品 内部连接PC ON PC.model=Product.model 其中制造商在 (选择制造商从产品中 Where type = 'PC' 交集 选择制造商从产品中 where type = 'Printer') 按制造商分组


2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

-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

4
通常人们会在回答中提供代码的解释。 - Abra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接