对于每个X,找到X. 4查询的平均Y.

时间:2012-04-12 17:46:21

标签: mysql

关系:

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. 找到制造至少三种不同型号pc的制造商
  4. 查找每个销售电脑的制造商,电脑的最高价格
  5. 查找高于2.0的每台个人电脑的平均价格
  6. 我可以轻松地对列的平均值进行“SELECT AVG(price)FROM pc”但我不知道如何为每个x找到它的平均值y。问题1,2,4,5是这样构造的,问题3我认为其中会有一个子查询,我认为它会找到与模型的关系,每个pc的制造商。但我不确定如何做第二部分“制造商至少制作三种不同的模型”

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

    有任何帮助吗?提前谢谢!

2 个答案:

答案 0 :(得分:3)

1 / X的使用GROUP BY

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

2 /非常相似..在阅读GROUP BY Mysql Documentation之后你能找到它吗?

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

逻辑:同样是1,但在这里我们需要制造者。所以我们需要添加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子句。没什么大不了的。

答案 1 :(得分:0)

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

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

右。

您的查询结果:

制造商Avg_Screen_Size

A 13

B 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

右。

您的查询结果:

制造商

E 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制造商

右。

您的查询结果:

制造商Max_Price

A 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