从 mysql 数据库获取最大计数

Getting max count from mysql database

我有table如下

+------+------+------+----------+
| 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 |
+------+---------------+

然后,我修改它以获得最大总数量,

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

任何人都可以帮助我了解我的查询有什么问题

提前致谢

您的查询有效,因为 MySQL 不会在 select 中的列未聚合或 grouped 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,然后使用 having 检查每个分组的 Delivery.cno 是否 sum(Delivery.quantity) 等于最大值条款。

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

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