4

只是一个练习问题,如果有人能解决这个问题,我会很感激。

我有一个名为 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 语句似乎并没有单独列出生产打印机的制造商,而是我在 Product 表中为每个制造商返回一个 AVG。

更新

这就是关系的样子:

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

5 回答 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

您只需添加一个条件以确保制造商是至少拥有一种打印机产品的制造商之一。然后,您按制造商分组以找到各个平均值。

于 2012-11-04T05:19:45.137 回答
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;
于 2012-11-04T05:08:27.103 回答
0

SELECT maker, AVG(hd) AS "average HDD capacity" FROM Product Inner Join PC ON PC.model=Product.model Where maker IN (select maker from product Where type = 'PC' Intersect select maker from product Where type = 'Printer ') 按制造商分组

于 2022-02-20T17:57:21.410 回答
0

选择制造商,平均(高清)

FROM PC INNER JOIN产品

ON PC.model=Product.model

GROUP BY制造商

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

于 2016-09-29T12:52:18.510 回答
-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
于 2019-07-21T18:16:57.577 回答