0

关系:

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

我目前正在尝试自学 MySQL 工作。我买了一本书,正在解决一些示例问题。我停下来试图弄清楚如何构建这些查询。

  1. 查找每种不同速度的 PC 的平均价格
  2. 查找每个制造商的笔记本电脑的平均屏幕尺寸
  3. 找到至少生产三种不同型号电脑的制造商
  4. 为每个销售 pc 的制造商查找 pc 的最高价格
  5. 求 pc 速度每高于 2.0 的平均价格

我可以轻松地对列进行平均“SELECT AVG(price) FROM pc”,但我不确定如何为每个 x 找到它的 y 平均值。问题 1、2、4、5 的结构是这样的,问题 3 我认为其中会有一个子查询,我认为会找到与模型、其中每台电脑的制造商的关系。但我不确定如何做第二部分“制造商至少生产三种不同的型号”

(SELECT model, maker FROM product NATURAL JOIN pc WHERE type = 'pc')

有什么帮助吗?提前致谢!

4

2 回答 2

4

1/ for X 是通过使用 a 完成的GROUP BY

`SELECT speed, AVG(price) FROM PC GROUP BY speed`

2/ 非常相似.. 阅读GROUP BY Mysql 文档后,您能找到它吗?

SELECT maker, AVG(speed) 
FROM product p 
JOIN laptop l 
ON p.type="Laptop" AND p.model = l.model
GROUP BY maker

逻辑:同样是 1,但这里我们需要 maker。所以我们需要从 Product 中添加列。我们用笔记本电脑加入产品,然后按制造商分组。

3/ 也是分组依据,你会想要使用 HAVING。试试看,如果您需要更多帮助或解决方案,请在评论中询问。

SELECT maker, COUNT(*)  
FROM Product p 
JOIN PC  
ON p.type="OC" AND p.model = pc.model
GROUP BY maker
HAVING COUNT(*) > 3

同2:与PC连接产品,现在按制造商分组,现在只保留计数高于3的行。您确实也可以使用子查询来做到这一点:

`SELECT maker 
from product p 
where (
  select COUNT(*) 
  from PC 
  where p.type="PC" and p.model = PC.model) 
> 3`

4/ 将被分组,并与产品加入以获得制造商

想再试一次吗?您提出的第一个解决方案是:

SELECT maker, MAX(DISTINCT price) AS MaxPrice 
FROM (
  SELECT model, maker, price 
  FROM product 
  NATURAL JOIN pc 
  WHERE type = 'pc') AS t5 
GROUP BY maker
  • 您不需要 MAX 中的 DISTINCT,最大值始终是最大值,即使两行具有相同的最大值。GROUP BY 也是一种独特的方式。
  • 您在这里的子查询并不是真正需要的,如果您决定子查询,请考虑您需要哪些列(您需要模型吗?为什么?)。
  • 是否愿意尝试与 3 中相同的逻辑,并进行连接?

5/ 类似于 1,但带有 WHERE 子句。没什么大不了的。

于 2012-04-12T17:49:07.283 回答
0

(2) 对于平均屏幕尺寸:

SELECT maker AS Maker, AVG(screen) AS Avg_Screen_Size FROM Product JOIN Laptop ON Product.model=Laptop.model AND Product.type='Laptop' GROUP BY maker

对。

您的查询结果:

制造商 Avg_Screen_Size

13

乙 14

C 12

==================================================== =====

(3) 对于 3 种不同型号的 PC:

SELECT Product.maker, COUNT(Product.model) FROM Product WHERE Product.type='PC' GROUP BY maker HAVING COUNT(Product.model) >=3

对。

您的查询结果:

制作者

3

==================================================== =======

(4) 最高价格:

SELECT DISTINCT maker, MAX(PC.price) AS Max_Price from Product, PC WHERE Product.type='PC' AND PC.price=(SELECT DISTINCT MAX(price) FROM PC WHERE PC.model=Product.model) GROUP BY maker

对。

您的查询结果:

制造商 Max_Price

980.0000

B 850.0000

E 350.0000

==================================================== ================

(5) 对于速度 20 以上的平均价格:

SELECT DISTINCT speed, AVG(PC.price) AS AVG_Price FROM PC INNER JOIN Product ON PC.model=Product.model WHERE PC.speed>20 GROUP BY PC.speed

对。

您的查询结果:

速度 AVG_Price

750 900.0000

800 970.0000

900 980.0000

于 2014-02-19T09:30:12.387 回答