2016-10-22 27 views
0

我需要顯示每個組(由GROUP BY組成)的值,它的值大於它所屬的組的平均值。我試圖這樣做:MySQL:如何檢查每個組的哪些條目的值大於其相應組中的平均值?

WHERE price>(SELECT AVG(I 。價格) FROM項I,C類 WHERE I.itemcode = C.itemcode GROUP BY C.category)

但它返回多個行,以便它不能與 「>」 運算符來使用。 這就是說,我該怎麼做?提前致謝!

編輯: 這裏是完整的查詢 SELECT C.category,I.itemname,I.price 從項目我INNER JOIN C類上I.itemcode = C.itemcode WHERE I.price>(SELECT AVG( I.price)FROM items I,category C WHERE I.itemcode = C.itemcode GROUP BY C.category ORDER BY 1,2,

+0

你能不能請張貼整個選擇?它需要被重寫大致 –

+0

SELECT C.category,I.itemname,I.price 從項目I INNER JOIN類別C on I.itemcode = C.itemcode WHERE I.price>(SELECT AVG(I.price)FROM項目I,類別C WHERE I.itemcode = C.itemcode GROUP BY C.category ORDER BY 1,2; @ Summer-Sky – Yeol

+0

所以你有一個物品和物品表? –

回答

1

你需要的是相關查詢。

在主查詢中爲您的類別表設置別名,然後在子查詢中使用該別名。

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表中的主查詢,而貓是子查詢的相同Cateogry表。

因此,它將計算與主查詢中查詢的項目具有相同類別的項目的平均項目價格。

請記住,這不是性能友好的,因爲它可能會計算主查詢中每個記錄的平均價格。所以要小心。

一個更好的辦法是使用加入由@指出,夏季,天空

+0

這怎麼能做到? :o – Yeol

+0

是的,它應該!謝謝 –

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; 
相關問題