gpt4 book ai didi

mysql - 将行值汇总到特定最大值的查询

转载 作者:行者123 更新时间:2023-11-29 07:20:44 24 4
gpt4 key购买 nike

我有一个包含 3 个这样的表的问题(我只显示有意义的字段):

表格顺序:

id
date

每个订单可以有更多行:

表 OrderRows:

id
order_id
article_id
quantity
quantity_evaded
quantity_available

现在在订单列表表上,我进行这样的查询以汇总订单的所有值(value)

SELECT o.*,
SUM(r.quantity) quantity, SUM(r.quantity_evaded) evaded,
SUM(r.quantity_available) available
FROM `Orders` AS `o`
LEFT JOIN `OrderRows` as `r` ON `r`.`order_id`=`o`.`id`
GROUP BY `o`.`id`

现在的问题是这个查询并没有告诉我订单是否可以关闭的事实。当订单中的所有商品对每一行都有足够的可用性时,可以关闭订单。让我们举个例子,我有一个包含 2 件商品的订单,商品 A 和商品 B,每件商品的订购数量为 5 件,A 的可用性为 10 件,B 的可用性为 2 件。

可用性总和为 12 (10+2),超过订购数量 10,但我没有足够的元素用于商品 B(订购 5 件中只有 2 件)。有没有办法以计算到特定最大值的方式求和,或者我唯一的方法是循环订单的所有行并检查所有单数行是否有足够的可用性?

最佳答案

您需要在应用聚合函数之前进行比较:

SELECT o.*,
SUM(r.quantity) as quantity,
SUM(r.quantity_evaded) as evaded,
SUM(r.quantity_available) as available,
NOT MAX( r.quantity > r.quantity_available ) as is_closed
FROM `Orders` `o` LEFT JOIN
`OrderRows` `r`
ON `r`.`order_id` = `o`.`id`
GROUP BY o.id;

如果订单无法关闭,表达式 r.quantity > r.quantity_available 返回 1MAX() 确定任何 文章是否符合此标准。

注意:这假设文章在一个订单中没有重复。

关于mysql - 将行值汇总到特定最大值的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56462181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com