只是一个练习题,有点混乱我很感激,如果有人可以解决这个问题。
我有一个名为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)
答案 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