从mysql数据库获取最大计数

时间:2015-05-02 07:25:40

标签: mysql sql phpmyadmin

我有如下表格

+------+------+------+----------+
| 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 个答案:

答案 0 :(得分:2)

你的查询是有效的,因为如果select中的列没有聚合或group编辑by,MySQL不会抛出错误,所以它设法显示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,然后使用{{1}检查每个分组Delivery.cno是否sum(Delivery.quantity)等于最大值}。clause。

答案 1 :(得分:1)

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

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