我必须找到所有制造打印机的制造商(来自pc_table
)的PC的平均内存大小(来自product_table
)。
pc_table
具有以下列:model
,speed
,ram
product_table
具有以下列:model
,manufacturer
,typeOfProduct
(计算机/打印机)
我已经编写了这段代码:
SELECT a.manufacturer, AVG(b.ram) AS avg_ram_size
FROM pc_table b, (SELECT manufacturer, model
FROM product_table
WHERE type='PRINTER') a
WHERE b.model = a.model
GROUP BY a.manufacturer;
但是由于某种原因,输出表只是空的。
注意:每个同时生产打印机和PC的制造商,但我的输出仍然是空表(这是错误的)。
我刚开始使用SQL,感谢您的帮助。 (如果缺少任何信息,请发表评论,然后我将其添加)
答案 0 :(得分:2)
听起来pc_table仅包含有关PC制造商的信息,但您想要有关同时制造打印机的PC制造商的信息。如果是这样,我建议使用类似的方法
SELECT p.manufacturer, AVG(pc.ram) AS avg_ram_size
FROM product_table p INNER JOIN pc_table pc
ON pc.model = p.model
WHERE p.manufacturer IN
(
SELECT p2.manufacturer
FROM product_table p2
WHERE p2.type='PRINTER'
)
GROUP BY p.manufacturer
另外,您当前的连接语法非常古老,当前的ANSI语法将使用INNER JOIN
。