2012-02-22 56 views
3

我需要一些帮助,从我的家庭作业中的一个问题,我一直在尝试大约一个小时,现在不能让它运行。mySQL查询问题 - 作业

列表比平均每客户的项目买更多的项目客户

的表如下所示:

Customer(Cnum, CustomerName, Address) 
Item(Inum, ItemName, Manufacturer, Year) 
Bought(Cnum, Inum, Date, Quantity) 
Prefer(Inum, Cnum) 

我能想出的最好的是,它需要的总每个客户的数量与数量的总体平均数相比较。我已经试过各种形式此查询:

SELECT Cnum 
FROM Bought 
WHERE 
(
    SELECT Cnum, SUM(Quantity) 
    FROM Bought 
    GROUP BY Cnum; 
) > 
(
    SELECT AVG(Quantity) 
    FROM Bought 
); 

但它返回一个错误 - (phpMyAdmin的心不是告诉我是什么问题,只是没有执行,并要无连接页面,这意味着错误在我的查询)

我也试图与回报更高SUM:

SELECT SUM(Quantity) 
FROM Bought 
WHERE SUM(Quantity) > AVG(Quantity); 

而且同样的问题。

任何帮助将不胜感激,甚至解释为什么第二个失败。

+0

有2个总和:4和2 ,平均为1.25 所以我知道哪个值应该显示 – NaGeLxZ 2012-02-22 04:59:58

+0

只是一个有用的提示:使用MySQL Workbench。它是免费的,更好的在报告错误 – xbonez 2012-02-22 05:02:54

+1

可以共享一些数据行? – 2012-02-22 05:04:42

回答

4

你可能想看看SQL的HAVING条款。

注:我故意不给你完整的答案,因为这是作业。

+0

+1不只是写为他:)从我 – OpenSorceress 2012-02-22 05:25:33

+0

很好,但我无法阻止自己给的答案,因为他们试图小时左右。 – 2012-02-22 05:31:43

+0

@JohnFx谢谢。虽然我可以轻松地选择复制较低的答案帖子,但您的答案已被接受,因为它向我展示了如何解决问题,而不是解决方案本身。 – NaGeLxZ 2012-02-22 15:32:43

1

试试这个,也许它可以帮助

SELECT Cnum, SUM(Quantity) 
FROM Bought 
GROUP BY Cnum 
HAVING SUM(OrderQuantity) > avg(Quantity) 
+0

错误1111 - 无效的使用组功能。您不能在WHERE子句中使用聚合。改变在哪里HAVING。 – 2012-02-22 05:16:19

+0

哦~~你也许是对我没有测试过这 – 2012-02-22 05:17:39

3

为什么你不试试这个。

SELECT `Cnum` , Sum(Quantity) 
FROM `bought` 
GROUP BY `Cnum` 
HAVING Sum(Quantity) > (SELECT AVG(Quantity) FROM Bought) 
1

尝试以下:

SELECT Cnum 
FROM Bought 
having SUM(Quantity) > (SELECT avg(Quantity) FROM Bought) 
order by SUM(Quantity) desc 
1

尝试此

SELECT Cnum, Inum, SUM(Quantity) sum, AVG(QUANTITY) average 
from bought group by cnum,inum having sum > average