gpt4 book ai didi

mysql - SQL Sum() - 字段中的 0 从聚合中排除行?

转载 作者:行者123 更新时间:2023-11-29 13:51:42 24 4
gpt4 key购买 nike

考虑以下查询:

$query = "
SELECT a_orders.id, a_orders.billing,
SUM(a_order_rows.quant_refunded*a_order_rows.price*((100-a_orders.discount)*.01)) as refund_total,
SUM(a_order_rows.quant*a_order_rows.price*((100-a_orders.discount)*.01)) as order_total
FROM a_order_rows JOIN a_orders
ON a_order_rows.order_id = a_orders.id
WHERE a_order_rows.quant_refunded > 0
GROUP BY a_orders.id, a_orders.billing
ORDER BY a_orders.id DESC
LIMIT 50";

SUM() 的两个用途是尝试汇总订单总额和已退款总额。当 quant_refunded 字段不为 0 时,它们会正确显示...例如,采用此数据(为了简单起见,不包括主键、item_id,假设每一行都是唯一的项目):

Table: a_order_rows
Fields: order_id, quant, quant_refunded
1, 1, 1
1, 2, 1
2, 1, 1
2, 1, 0

在“阶数 1”的情况下,两个聚合不同并且行为符合预期。但对于“订单 2”,这两个数字是相同的 - 这两个数字都是我期望的 returned_total 的值。 Quant_refunded 中带有“0”的行似乎已从 order_total 聚合中排除。

希望这能得到足够彻底的解释。如果您需要更多信息,请告诉我,我会修改。谢谢!

最佳答案

$query = "
SELECT a_orders.id, a_orders.billing,
SUM(a_order_rows.quant_refunded*a_order_rows.price*((100-a_orders.discount)*.01)) as refund_total,
SUM(a_order_rows.quant*a_order_rows.price*((100-a_orders.discount)*.01)) as order_total
FROM a_order_rows JOIN a_orders
ON a_order_rows.order_id = a_orders.id
GROUP BY a_orders.id, a_orders.billing
HAVING MAX(a_order_rows.quant_refunded) > 0
ORDER BY a_orders.id DESC
LIMIT 50";

将其更改为 HAVING 子句。如果任何 quant_refunded 行 > 0,HAVING MAX 将保留它。

关于mysql - SQL Sum() - 字段中的 0 从聚合中排除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597410/

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