我有如下表格
+------+------+------+----------+
| 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
任何人都可以帮我理解我的查询有什么问题
提前致谢
答案 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)