从 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
中的列未聚合或 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
,然后使用 having
检查每个分组的 Delivery.cno
是否 sum(Delivery.quantity)
等于最大值条款。
总和可能不是唯一的。尝试:
select Delivery.cno, sum(Delivery.quantity) as totalQuantity
from Delivery
group by Delivery.cno
having totalQuantity = max(totalQuantity)
我有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
中的列未聚合或 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
,然后使用 having
检查每个分组的 Delivery.cno
是否 sum(Delivery.quantity)
等于最大值条款。
总和可能不是唯一的。尝试:
select Delivery.cno, sum(Delivery.quantity) as totalQuantity
from Delivery
group by Delivery.cno
having totalQuantity = max(totalQuantity)