关系:
Product( maker, model, type )
PC( model, speed, ram, hd, price)
Laptop( model, speed, ram, hd, screen, price)
Printer( model, color, type, price)
我目前正在尝试自学MySQL工作。我买了一本书,正在解决一些示例问题。我已经停下来试图弄清楚如何构建这些查询。
我可以轻松地对列的平均值进行“SELECT AVG(price)FROM pc”但我不知道如何为每个x找到它的平均值y。问题1,2,4,5是这样构造的,问题3我认为其中会有一个子查询,我认为它会找到与模型的关系,每个pc的制造商。但我不确定如何做第二部分“制造商至少制作三种不同的模型”
(SELECT model, maker FROM product NATURAL JOIN pc WHERE type = 'pc')
有任何帮助吗?提前谢谢!
答案 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
5 /类似于1,但带有WHERE子句。没什么大不了的。
答案 1 :(得分:0)
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
=============================================== ======
SELECT Product.maker,COUNT(Product.model)FROM Product WHERE Product.type ='PC'GROUP BY maker HAVING COUNT(Product.model)> = 3
右。
您的查询结果:
制造商
E 3
=============================================== ==========
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
=============================================== ==================
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