2015-05-02 46 views
0

我有表如下从MySQL数据库中获取最大计数

+------+------+------+----------+ 
| vno | ino | cno | quantity | 
+------+------+------+----------+ 
| V1 | I1 | C1 |  150 | 
| V1 | I5 | C1 |  100 | 
| V1 | I5 | C4 |  150 | 
| V2 | I2 | C1 |  50 | 
| V2 | I2 | C4 |  500 | 
| V2 | I2 | C5 |  500 | 
| V2 | I3 | C4 |  300 | 
| V2 | I6 | C4 |  300 | 
| V3 | I1 | C1 |  10 | 
+------+------+------+----------+ 

我想找回谁买了最大数量

以下的客户是我的查询

SELECT Delivery.cno, sum(Delivery.quantity) as totalQuantity From Delivery group by Delivery.cno 

此查询给下面的结果

+------+---------------+ 
| cno | totalQuantity | 
+------+---------------+ 
| C1 |   310 | 
| C4 |   1250 | 
| C5 |   500 | 
+------+---------------+ 

然后,我修改了它,以获得最大总Quentity,

SELECT B.cno,max(B.totalQuantity) as maxQuantity from 
(SELECT Delivery.cno, sum(Delivery.quantity) as totalQuantity From Delivery group by Delivery.cno) B order by B.cno; 

它给了我下面的结果

+------+---------------+ 
| cno | totalQuantity | 
+------+---------------+ 
| C1 |   1250| 

这个答案是完全错误的,因为C1有310计数,不是1250

有人可以帮我了解我的查询有什么问题

在此先感谢

回答

2

您的查询正在运行,因为如果select中的列未汇总,或者group ed by中有列,所以它管理显示B.cno,但结果不正确。

如果总和是独一无二的,你可以使用以下方法:按总sum顺序降序排列的纪录,并获得第一条记录(最大totalQuantity):

select Delivery.cno 
    , sum(Delivery.quantity) as totalQuantity 
from Delivery 
group by Delivery.cno 
order by totalQuantity desc 
limit 1 

否则,您可以使用查询上述发现的最大totalQuantity,然后检查每个分组Delivery.cno如果它sum(Delivery.quantity)等于使用having条款最大。

+0

谢谢你的解决方案。你能帮助我理解为什么我使用的查询不使用MySQL。是不是因为MySQL数据库的限制 – KItis

1

总和可能不是唯一的。尝试:

select Delivery.cno, sum(Delivery.quantity) as totalQuantity 
from Delivery 
group by Delivery.cno 
having totalQuantity = max(totalQuantity)