我需要显示每个组的值(由GROUP BY组成),其值大于它所属组的平均值。我试着这样做:
价格> (选择AVG(I.price) 来自项目I,类别C. 在哪里I.itemcode = C.itemcode GROUP BY C.category)
但它会返回多行,因此无法与">"一起使用。运营商。 那说,我怎么能这样做?提前谢谢!
编辑: 这是完整的查询 SELECT C.category,I.itemname,I.price 从项目I INNER JOIN类别C到I.itemcode = C.itemcode 在哪里I.price> (SELECT AVG(I.price)FROM items I,category C WHERE I.itemcode = C.itemcode GROUP BY C.category) 订购1,2;
答案 0 :(得分:1)
你需要的是相关的查询。
在主查询中为Category表设置别名,然后在子查询中使用该别名。
SELECT C.category, I.itemname, I.price
FROM item I INNER JOIN category C on I.itemcode = C.itemcode
WHERE I.price > (SELECT AVG(Itm.price) FROM items Itm, category Cat
WHERE Itm.itemcode = Cat.itemcode
and Cat.cateogry = C.category)
ORDER BY 1, 2;
魔术在这里Cat.category = C.category
C是主查询中的Cateogry表,而Cat是子查询的相同Cateogry表。
因此,它将计算与主查询中查询的项目具有相同类别的项目的平均项目价格。
请记住,这不是对性能友好的,因为它可能会计算主查询中每条记录的平均价格。所以要小心。
更好的方法是使用@ Summer-Sky
指出的联接答案 1 :(得分:1)
或者
SELECT C.category, I.itemname, I.price
FROM items I
INNER JOIN category C on I.itemcode = C.itemcode
JOIN (
SELECT C.category, AVG(I.price) avgprice
FROM items I, category C
WHERE I.itemcode = C.itemcode
GROUP BY C.category) A on A.category = C.category
WHERE I.price > A.avgprice ORDER BY 1, 2;